У меня есть приложение, запущенное на 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>
Как мне решить мою проблему?
приписка
Я пытался запустить оба приложения в одном часовом поясе. В этом случае все работает как положено.
P.S.2
Я пытался использовать версию драйвера MySQL 6.0.6, но это ничего не меняет.