问题
调试代码中,确定了new Date();
出来的时间数据是准确了,没有出现差14小时情况,通过Spring hibernate jdbc这一路保存到mysql数据库中,就出现了14小时问题。
排查
mysql排查
# 查看mysql时区mysql> SELECT @@global.time_zone, @@session.time_zone;+--------------------+---------------------+| @@global.time_zone | @@session.time_zone |+--------------------+---------------------+| SYSTEM | +08:00 |+--------------------+---------------------+# 东八区,没有问题的# 主动查询当前时间mysql> select now();+---------------------+| now() |+---------------------+| 2018-12-18 17:11:05 |+---------------------+1 row in set (0.00 sec)# 没有问题,时间与当前时间是一致的。
到这里,基本上排除了是mysql数据库时区不对的问题,之前在代码中debug,也没有发现是代码中的问题。到这里,只有尝试在jdbc中主动设置东八区。之前就出现过,会不会spring的jdbc也是需要设置东八区类?
解决
jdbc时区
只需要中添加&serverTimezone=GMT%2B8
设置jdbc时区为东八区就可以了,GMT+8
表示东八区,当jdbc只能认识GMT%2B8
写法。例如:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8