Ручной запуск SpringLiquibase использует неправильный часовой пояс - PullRequest
0 голосов
/ 02 июля 2019

Я использую liquibase для сброса базы данных между тестами. Начиная со стандартного весеннего запуска в начале моих тестов, он вставляет данные с правильным TZ. Когда я запускаю его вручную, он применяет другой TZ.

У меня есть application.properties, настроенные с spring.jpa.properties.hibernate.jdbc.time_zone=UTC и включенная жидкость. При вставке данных времени в столбец времени он вставляет 12:00:00 без проблем.

Когда я пытаюсь перезапустить liquibase между моими тестами, все в порядке, за исключением того, что время вставляется, когда текущий локальный TZ (+01: 00) дает мне 13:00:00 вместо этого.

@Autowired
SpringLiquibase liquibase;

public void clean() {
   liquibase.setShouldRun(true);
   liquibase.setDropFirst(true);
   liquibase.afterPropertiesSet();
}

Существует метод setChangelogProperties, но я не могу найти документацию для каких-либо вещей, связанных с TZ.

Я пытался повторно ввести источник данных, пробовал ВРЕМЯ, ВРЕМЯ БЕЗ ВРЕМЕНИ, но безрезультатно.

При повторном запуске того же компонента SpringLiquibase, выполняемого во время инициализации приложения, я ожидал, что та же информация TZ и любая другая конфигурация будут поддерживаться и использоваться повторно.

UPDATE

После пробного использования множества различных настроек часового пояса во время тестов единственное, что сработало, это -Duser.timezone = UTC из командной строки.

Установка этого значения как System.setProperty("-Duser.timezone","UTC") как можно раньше, а также перед повторным запуском ликвазы не оказывает никакого влияния.

Есть ли способ, которым я могу заставить пружину установить это, прежде чем он загрузит все?

Странно, что первый запуск через пружину в порядке, но последующие, похоже, теряют настройку часового пояса.

ОБНОВЛЕНИЕ 2

Установка TimeZone.setDefault(TimeZone.getTimeZone("UTC")) либо никогда не поднимается, либо происходит недостаточно рано.

Добавление следующего к моему тесту

    static {
        System.setProperty("UTC");
    }

также, по-видимому, выполняется недостаточно рано или не распространяется должным образом на жидкостьбазу.

Определенно кажется, что SpringLiquibase работает по своим собственным правилам или что-то странное происходит с загрузкой драйвера

...