У меня есть приложение, запущенное на tomcat на MACHINE_A с часовым поясом GMT + 3.
Я использую удаленный сервер MySQL, запущенный на MACHINE_B с часовым поясом UTC.
Мы используем spring-data-jpa для настойчивости.
В качестве примера проблемы я покажу репозиторий:
public interface MyRepository extends JpaRepository<MyInstance, Long> {
Optional<MyInstance> findByDate(LocalDate localDate);
}
Если я передам localDate для 2018-09-06
, я получаю объекты, где дата равна 2018-09-05
(предыдущий день)
В журналах я вижу:
2018-09-06 18:17:27.783 TRACE 13676 --- [nio-8080-exec-3] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [DATE] - [2018-09-06]
Я много искал этот вопрос и нашел несколько статей с одним и тем же контентом (например, https://moelholm.com/2016/11/09/spring-boot-controlling-timezones-with-hibernate/)
Итак, у меня есть следующее application.yml
:
spring:
datasource:
url: jdbc:mysql://localhost:3306/MYDB?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root
password: *****
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
properties:
hibernate:
show_sql: true
use_sql_comments: true
format_sql: true
type: trace
jdbc:
time_zone: UTC
Но это не помогает.
Мы используем следующий разъем:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
Как я могу решить свою проблему?
PS
Я попытался запустить оба приложения с одним и тем же часовым поясом. В этом случае все работает так, как ожидалось.
PS2
Я попытался использовать версию MySQL 6.0.6, но ничего не изменил.