Установка часового пояса сессии с пружиной jdbc оракул

У меня есть spring/jdbc/oracle 10-граммовое приложение. Часовой пояс базы данных сервера Oracle установлен на GMT +, 2 часовыми поясами JVM является GMT + 2 (даже при том, что он не имеет значения в моем случае).

У меня есть хранимая процедура, которая выполняет некоторые операции даты. Проблема состоит в том, что часовой пояс сессии отличается (GMT), чем часовой пояс базы данных даже при том, что я не устанавливаю часовой пояс сессии, явный в моем коде/конфигурации.

Насколько я знаю, что часовой пояс сессии по умолчанию равен часовому поясу базы данных. Какая-либо идея, почему часовой пояс сессии отличается, чем часовой пояс базы данных или как я могу настроить его в пружинной конфигурации (org.apache.commons.dbcp. BasicDataSource)?

Спасибо.

6
задан user337620 10 May 2010 в 21:44
поделиться

1 ответ

Правильный способ - использовать DelegatingDataSource , получить объект OracleConnection из исходного источника данных и вызвать 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;
    }
}
6
ответ дан 16 December 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: