#hibernate #jdbc #timezone #quarkus #utc
Вопрос:
Я извлекаю DATE
поле из таблицы базы данных mariadb. Я специально не использую TIMESTAMP
, потому что бизнес-требование — это дата без времени. Я хочу использовать UTC для всех вычислений и быть независимым от любого часового пояса. База данных использует UTC. В производственной среде JVM тоже используется UTC, и все казалось нормальным. Теперь при локальном запуске интеграционного теста на моем компьютере, использующем часовой пояс CET, интеграционный тест сломался, поэтому я определил, что у меня здесь проблема.
Я мог бы, конечно, запустить JVM, -Duser.timezone=UTC
но это все равно кажется очень подверженным ошибкам. Я также мог бы установить quarkus.hibernate-orm.jdbc.timezone=UTC
свое application.properties
, но опять же: это тоже не кажется идеальным решением. Я думаю, что должен быть способ динамически для собственного запроса определять используемый часовой пояс.
Есть ли более стабильное решение?
Например, есть ли что-то динамичное в этом смысле: Запрос query = this.getEntityManager().createNativeQuery(MY_QUERY); запрос.Часовой пояс(«UTC»);
Таким образом, код всегда будет работать независимо от JVM или каких-либо свойств или параметров запуска.
Комментарии:
1. Как насчет двух решений, о которых вы упомянули, которые кажутся вам подверженными ошибкам? Какие ошибки вы предвидите?
2. Что используется другое приложение.свойства или что JVM не запускается с настройкой user.timezone=UTC. Это приведет к получению неверных данных, и, возможно, их даже не заметят.