У меня странная дилемма с h2.У нас есть настройка h2 db в памяти, режим а-ля Oracle, чтобы помочь с нашими модульными тестами.Мы установили часовой пояс приложения как
@PostConstruct
void started() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
У нас есть наша настройка h2 в качестве источника данных в нашем приложении maven / springboot, как показано ниже:
datasource.config.url=jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=ORACLE;
datasource.config.username=sa
datasource.config.password=
datasource.config.driver-class-name=org.h2.Driver
И у меня есть тестбег, который основан на отметке времени.Итак, я написал этот маленький картограф, чтобы получить время DB из h2:
@Select("Select CURRENT_TIMESTAMP")
String selectCurrentTimestamp();
Проблема в том, что h2 продолжает брать реальное системное время, на котором работает, вместо того, чтобы слушать настройки часового пояса, изложенные выше.Так что вставки в наши юнит-тесты вставляются в нужное время, независимо.Но выборки, основанные на времени, похоже, переводятся на основе системного времени и, следовательно, не работают должным образом.Я также сделал переход к использованию более новых java 8 классов java.time в качестве параметров для моих функций выбора и т. Д. До сих пор нет игры в кости.
Я прочитал несколько хороших сообщений об этомвключающий спящий режим (не используется явно) и несколько других слегка похожих вопросов.Однако я не нашел решения этой конкретной проблемы и мог бы использовать некоторую помощь.
Кто на самом деле является источником этой проблемы, JDBC?Или H2?И в зависимости от этого, как я могу начать путь, чтобы исправить это?Есть ли строка, которую я могу предоставить для URL соединения JDBC?Или сделать другую настройку?