当前位置: 首页 > 面试题库 >

使用Spring和DBCP和MySQL设置连接时区

公良泰宁
2023-03-14
问题内容

我的环境

  • Java 5
  • Spring2.5.5
  • DBCP数据源 (org.apache.commons.dbcp.BasicDataSource)
  • 的MySQL

类似职位

  • 使用Spring JDBC Oracle设置会话时区

链接

  • http://www.mysqlfaqs.net/mysql-faqs/General-Questions/How-to-manage-Time-Zone-in-MySQL

我的问题

  • 我需要在连接上设置时区,以防止在处理TIMESTAMP列时进行转换。

我的想法/研究

  • DBCP连接池未在时区提及任何内容。链接

  • 我在这篇文章中描述了我认为可以的调查,例如:









寻求帮助的地方:)

  • 但是,这是行不通的!
  • 我在这里想要的是一种简单的方法,优先使用Spring在jdbc连接上配置时区。

在此先感谢您的帮助/提示/建议/知识共享

解:

我的解决方案基于这篇文章中收集的提示!谢谢大家!

(...)
@Override
public Connection getConnection() {
    Connection conn = null;
    Statement statement = null;
    try {
        conn = super.getConnection();
        statement = conn.createStatement();
        statement.execute("SET time_zone = \'" + timezone+"\'");
    } catch (SQLException e) {
        LOG.fatal("Error while SET time_zone", e);
    } finally {
        try {
            statement.close();
        } catch (SQLException e) {
            LOG.warn("Error while closing statement", e);
        }
    }
    if(LOG.isDebugEnabled())
        LOG.debug("SET time_zone("+timezone+") for connection, succeed!");
    return conn;
}
(...)

在我的Spring配置文件上:

<bean id="dataSource" class="com.my.package.dbcp.TimezoneEnabledDataSource" destroy-method="close">
    (...)
    <property name="timezone" value="${database.timezone}" />
    (...)
</bean>

希望这篇文章对以后的人有所帮助。有什么问题我吗!


问题答案:

如果数据源没有这样的属性,则可以对其进行扩展并添加该属性:

public TimezoneEnabledDataSource extends BasicDataSource {
    private String timezone;
    //getter and setter for it

    @Override    
    public Connection getConnection() {
        Connection c = super.getConnection();
        // execute a query: SET time_zone = '-8:00'
        return c;
    }
}

有关查询的详细信息,请参见http://www.electrictoolbox.com/mysql-set-timezone-per-
connection/

MySQL文档写道:

每个连接的时区。每个连接的客户端都有自己的时区设置,由会话time_zone变量指定。最初,会话变量从全局time_zone变量获取其值,但是客户端可以使用以下语句更改其自己的时区:

mysql> SET time_zone =时区;

您还可以检查c3p0是否没有内置的东西。



 类似资料:
  • 问题内容: 似乎与我的应用程序有关。每当启动应用程序很长时间(不确定确切的时间)后,我的日志中都会出现以下错误消息。我正在使用Spring + Hibernate + MySQL和ApacheDBCP进行连接池 如果我重新启动URL,则一切正常。我认为这与我的连接池有关。这是我的Apache DBCP设置,MYSQL中的wait_timeout设置为其默认值。(28800秒或8小时)。 在搜索的同

  • 我有一个应用程序,其中DB连接由Spring配置创建(然后传递到hibernate)。以下是spring文件中的默认参数。 然而,在特定的环境中,Oracle DB连接会在一段时间后被网络设置关闭。我们最初认为关闭连接是因为连接处于空闲状态。我们添加了validationQuery,以便定期在服务器上发布查询,这样连接就不会空闲。 即使在上述设置之后,连接仍然会关闭 还观察到,当应用程序空闲2-3

  • 我有一个Spring Boot应用程序的问题。我想在我的Spring Boot应用程序中连接一个MongoDB数据库和一个MySql数据库。我想知道这是不是可能的,在肯定的情况下,我如何能使这种多重连接。我尝试了一个基于Mysql和Post的示例,但没有成功。所以我想知道是否有人有一个简单的例子来知道这个方法。谢谢

  • 为(默认)WebClient设置(连接)超时的正确方法是什么? 仅仅在得到的单声道(或通量)上使用方法就够了吗?还是这会导致可能的内存/连接泄漏? 提前道谢! (Spring5WebFlux的答案是如何在Webclient上设置超时的,但不起作用!)

  • 我尝试使用spring boot和MySQL制作一些rest API。我在我的eclipse环境中完成了它。下一步是创建docker映像。然而,当我在docker中运行MySQL服务器和RESTAPI时,它会给我一个连接拒绝错误。 我找到了其他基本的spring-boot和MySQL教程。但我无法解决这个问题。 这是 spring-boot 项目的 mysql 设置。 这是在docker中运行my

  • 我正在开发一些使用mysql的java(spring-boot)RestFul Web服务,比如关系数据库。现在,有时我会遇到以下异常: 我的应用程序部署在wildFly 10.0.0应用程序服务器上,否则我使用的是tomcat-jdbc 8.5.23类似的连接池。无论如何,这是我的pom.xml依赖项: 我阅读了更多关于此问题的文章:在Connector/J中调试通信链路故障异常 关于这个问题有