Установка часового пояса сессии с весенним jdbc oracle - PullRequest
6 голосов
/ 10 мая 2010

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

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

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

Спасибо.

Ответы [ 3 ]

6 голосов
/ 13 мая 2010

Правильный способ - использовать 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;
    }
}
1 голос
/ 31 августа 2012

Я решил эту проблему, обновив драйверы JDBC Oracle с версии 10.2.0.1.0 до версии 11.2.0.3. Никаких изменений в моем Java-коде не требовалось.

Источник: Весенние форумы .

0 голосов
/ 16 августа 2018

В весенней конфигурации добавьте ниже параметры VM перед запуском приложения:

-Duser.timezone=EDT

Также убедитесь, что у вашего pom установлена ​​последняя версия драйвера jdbc

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>12.2.0.1</version>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...