背景:
spring cloud 开发web项目,数据库:mysql 持久性框架:mybatis
问题:
前一段时间遇到这么一个问题:新增数据时,datatime类型的数据插入到mysql数据库后时间相差14个小时(数据库数据比当前时间少14个小时)。
排查:
1、程序在入库前没有做任何特殊处理
2、检查系统时区:CST
3、检查数据库时区:CST(没有修改的话一般都是系统时区)
造成这种问题的原因是因为高版本jdbc导致的问题,高版本的jdbc底层驱动程序对从数据库查询出来的时间用了一个Calender做类型转换,Calender记录中包含的时区导致差了14小时。(引用自:https://www.cnblogs.com/bignode/p/9310893.html)
解决:
有两种方式解决此问题
方式一:在配置文件的jdbc的url上面手动设置了serverTimezone=CST(保持和操作系统和数据库一致的时区,不管哪里的时区只要保持一致就可以喽)
方式二:修改pom文件的spring-boot版本和spring-cloud版本,比如
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RC1</spring-cloud.version>
</properties>
这样就自动引入5.1.46版本的jdbc驱动,就不会出现相差14个小时的问题啦