使用Spring JDBC Oracle设置会话时区

我有一个spring / jdbc / oracle 10g应用程序。Oracle服务器数据库时区设置为GMT + 2 JVM时区设置为GMT +

2(即使对于我而言这无关紧要)。

我有一个执行某些日期操作的存储过程。问题是,即使我未在代码/配置中明确设置会话时区,会话时区也不同于数据库时区(GMT)。

据我所知,会话时区默认情况下等于数据库时区。知道为什么会话时区与数据库时区不同,或者如何在春季配置中配置它(org.apache.commons.dbcp.BasicDataSource)?

谢谢。

回答:

正确的方法是使用DelegatingDataSourceOracleConnection从原始数据源检索对象,然后OracleConnection.setSessionTimeZone()使用适当的参数进行调用。

C3P0代码如下所示:

private Object[] timeZoneArgs = new Object[] { "Europe/Berlin" };

@Override

public Connection getConnection() throws SQLException {

Connection conn = super.getConnection();

try {

final Method setSessionTimeZoneMethod = OracleConnection.class.getMethod("setSessionTimeZone", String.class);

final C3P0ProxyConnection castCon = (C3P0ProxyConnection) conn;

castCon.rawConnectionOperation(setSessionTimeZoneMethod, C3P0ProxyConnection.RAW_CONNECTION, timeZoneArgs);

return conn;

} catch (Exception e) {

log.error("setSessionTimeZone failed " + e.getMessage());

return conn;

}

}

以上是 使用Spring JDBC Oracle设置会话时区 的全部内容, 来源链接: utcz.com/qa/423989.html

回到顶部