Size: a a a

Java/Kotlin Web and more

2020 November 11

А

Антон in Java/Kotlin Web and more
как так может получиться, что я в application.properties ставлю logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG
но когда запускаю приложение под другим профилем, то тоже вижу логи монги? Другой профиль точно активируется, и там нет такой проперти
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
так это файл с дефолтными настройками, он грузится всегда
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
дальше уже application-{profile}.properties
источник

А

Антон in Java/Kotlin Web and more
в смысле всегда? т.е. если у меня в другом профиле не переопределено это значение, то оно его подтянет из application.properties?
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
да
источник

А

Антон in Java/Kotlin Web and more
вот это открытие для меня )
спасибо
источник

K

Kirill in Java/Kotlin Web and more
Сталкивался кто-либо с подхватом клиентской таймзоны postgres сервером?

Имеем:
1) postgres с заданной по дефолту таймзоной utc+2 (видно через "show timezone;" в pgadmin)
2) spring boot прила, развернутая на серваке в таймзоне utc+3
(+ spring data)

Запрос к бд:
Query query1 = entityManager.createNativeQuery("SELECT now() || '---';");
(конкатенация на стороне бд исключает связь с таймзоной спринга при выводе в лог)
После этого получаю время с таймзоной машины, на которой запущена спринг прила (+3). Нужно получить время с учетом таймзоны заданной у постгрес сервера (+2).

Вычитал, что при jdbc коннекте может сетаться и использоваться клиентская таймзона. На данный момент сработал только один способ: смена таймзоны на машине со спрингом.
Может есть идеи, куда копать/смотреть?

Пробовали, но безуспешно:
application.yml:
1) spring.datasource.url: jdbc:postgresql://${POSTGRES_DB_HOST:хост:порт}/${POSTGRES_DB_NAME:имя_бд}?serverTimezone=GMT+2&useLegacyDatetimeCode=false
2) user.timezone: GMT+2 (в том числе и как аргумент при запуске из cmd через -D)
3) spring.jpa.properties.hibernate.jdbc.time_zone: GMT+2
4) hibernate.jdbc.time_zone: GMT+2
прочее:
5) `@PostConstruct void started() {
TimeZone.setDefault(TimeZone.getTimeZone("GMT+2"));
}`
источник

RS

Ruslan Stelmachenko in Java/Kotlin Web and more
Kirill
Сталкивался кто-либо с подхватом клиентской таймзоны postgres сервером?

Имеем:
1) postgres с заданной по дефолту таймзоной utc+2 (видно через "show timezone;" в pgadmin)
2) spring boot прила, развернутая на серваке в таймзоне utc+3
(+ spring data)

Запрос к бд:
Query query1 = entityManager.createNativeQuery("SELECT now() || '---';");
(конкатенация на стороне бд исключает связь с таймзоной спринга при выводе в лог)
После этого получаю время с таймзоной машины, на которой запущена спринг прила (+3). Нужно получить время с учетом таймзоны заданной у постгрес сервера (+2).

Вычитал, что при jdbc коннекте может сетаться и использоваться клиентская таймзона. На данный момент сработал только один способ: смена таймзоны на машине со спрингом.
Может есть идеи, куда копать/смотреть?

Пробовали, но безуспешно:
application.yml:
1) spring.datasource.url: jdbc:postgresql://${POSTGRES_DB_HOST:хост:порт}/${POSTGRES_DB_NAME:имя_бд}?serverTimezone=GMT+2&useLegacyDatetimeCode=false
2) user.timezone: GMT+2 (в том числе и как аргумент при запуске из cmd через -D)
3) spring.jpa.properties.hibernate.jdbc.time_zone: GMT+2
4) hibernate.jdbc.time_zone: GMT+2
прочее:
5) `@PostConstruct void started() {
TimeZone.setDefault(TimeZone.getTimeZone("GMT+2"));
}`
Если хочется, чтобы все приложение работало в таймзоне +2, напишите то, что написали в 5 пункте просто в методе main перед поднятием контекста спринга.
источник

RS

Ruslan Stelmachenko in Java/Kotlin Web and more
2 тоже должно работать. -Duser.timezone=GMT+2 (при условии, что это корректное значение названия таймзоны).
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
Kirill
Сталкивался кто-либо с подхватом клиентской таймзоны postgres сервером?

Имеем:
1) postgres с заданной по дефолту таймзоной utc+2 (видно через "show timezone;" в pgadmin)
2) spring boot прила, развернутая на серваке в таймзоне utc+3
(+ spring data)

Запрос к бд:
Query query1 = entityManager.createNativeQuery("SELECT now() || '---';");
(конкатенация на стороне бд исключает связь с таймзоной спринга при выводе в лог)
После этого получаю время с таймзоной машины, на которой запущена спринг прила (+3). Нужно получить время с учетом таймзоны заданной у постгрес сервера (+2).

Вычитал, что при jdbc коннекте может сетаться и использоваться клиентская таймзона. На данный момент сработал только один способ: смена таймзоны на машине со спрингом.
Может есть идеи, куда копать/смотреть?

Пробовали, но безуспешно:
application.yml:
1) spring.datasource.url: jdbc:postgresql://${POSTGRES_DB_HOST:хост:порт}/${POSTGRES_DB_NAME:имя_бд}?serverTimezone=GMT+2&useLegacyDatetimeCode=false
2) user.timezone: GMT+2 (в том числе и как аргумент при запуске из cmd через -D)
3) spring.jpa.properties.hibernate.jdbc.time_zone: GMT+2
4) hibernate.jdbc.time_zone: GMT+2
прочее:
5) `@PostConstruct void started() {
TimeZone.setDefault(TimeZone.getTimeZone("GMT+2"));
}`
а в какой тип десериализуете?
источник
2020 November 12

K

Kirill in Java/Kotlin Web and more
Alexandr Emelyanov
а в какой тип десериализуете?
Если вы про запись в лог - String
Если про то, откуда возникла проблема, то тут немного не об этом: мы из базы дергаем функцию, которая отдает статус на основании разницы текущего времени и сохраненного в поле некой сущности. То бишь все подсчеты на стороне бд. Текущее время определяется вызовом now(), а сохраненное время определено как timestamp without time zone. И из-за разницы в таймзонах словили неверный статус и пошли по цепочке разбираться.

Что-то подсказывает, есть еще способ зафиксировать таймзону на стороне бд, чтобы клиент не мог ролять на нее
источник

K

Kirill in Java/Kotlin Web and more
Ruslan Stelmachenko
Если хочется, чтобы все приложение работало в таймзоне +2, напишите то, что написали в 5 пункте просто в методе main перед поднятием контекста спринга.
Сработало, спасибо! -Duser.timezone=GMT+2 тоже работает, если как аргумент jvm подкинуть
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
Kirill
Если вы про запись в лог - String
Если про то, откуда возникла проблема, то тут немного не об этом: мы из базы дергаем функцию, которая отдает статус на основании разницы текущего времени и сохраненного в поле некой сущности. То бишь все подсчеты на стороне бд. Текущее время определяется вызовом now(), а сохраненное время определено как timestamp without time zone. И из-за разницы в таймзонах словили неверный статус и пошли по цепочке разбираться.

Что-то подсказывает, есть еще способ зафиксировать таймзону на стороне бд, чтобы клиент не мог ролять на нее
Ваша проблема в without timezone, храните со смещением и проблема уйдет
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
Kirill
Сработало, спасибо! -Duser.timezone=GMT+2 тоже работает, если как аргумент jvm подкинуть
Это костыль, который сломается очень легко
источник

K

Kirill in Java/Kotlin Web and more
Alexandr Emelyanov
Это костыль, который сломается очень легко
Да, согласен.
Насчет фикса типов в базе решение предложим, спасибо. Но, боюсь, в случае нашего жуткого легаси заказчик все же предпочтет костыли
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
Kirill
Да, согласен.
Насчет фикса типов в базе решение предложим, спасибо. Но, боюсь, в случае нашего жуткого легаси заказчик все же предпочтет костыли
там очень простая миграция) только логика заполнения останется
источник

AJ

Adam Jensen in Java/Kotlin Web and more
есть какие-то отличия для joda.DateTime при валидации в спринге от обычного Date из утиля?
источник

AJ

Adam Jensen in Java/Kotlin Web and more
для hibernate и javax валидации
источник

C

Cyclone in Java/Kotlin Web and more
Kirill
Да, согласен.
Насчет фикса типов в базе решение предложим, спасибо. Но, боюсь, в случае нашего жуткого легаси заказчик все же предпочтет костыли
Храните timestamp. Ответ на все таймзоны.
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
Cyclone
Храните timestamp. Ответ на все таймзоны.
с зоной хранить надо
источник