一. 前言
小熙的项目是springcould的微服务,采用的是springboot 2.1.12。
二. 问题
查询数据库,返回到项目中的时间比数据库的时间多了13小时。
当时想到是时区问题
-
查询数据库是正常的。
-
项目当前模块的yml时区设置是正常的
spring: jackson: time-zone: Asia/Shanghai #设置时区为Asia/Shanghai date-format: yyyy-MM-dd HH:mm:ss
-
经过小熙的查询是连接数据库的JDBC没有指定对应时区,所以出现问题(连接上回显数值异常)
三. 解决
在JDBC上加上对应的时区(两者都可以),防止回显数值异常。
serverTimezone=GMT%2B8 时区=东八区
serverTimezone=Asia/Shanghai
例如:
spring:
datasource:
druid:
# JDBC 配置(驱动类自动从url的mysql识别,数据源类型自动识别)
url: jdbc:mysql://127.0.0.1:3306/chengxi-test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&tinyInt1isBit=false
username: chengxi
password: 123
driver-class-name: com.mysql.cj.jdbc.Driver
-
关于北京时区:Asia/beijing,当ssl连接为true值的时候会异常
useSSL=false
-
小熙的springboot版本是2.1.12,从2.1.x以上的版本会默认引入mysql连接器8.0以上版本
所以连接器用的是mysql-connector-java-8.0.x.jar
而在MySQL连接器8.0以上版本中会存在时区问题
新版的驱动类改成了com.mysql.cj.jdbc.Driver
新版驱动连接url也有所改动 ,所以需要按对应场景指定对应时区。
四. 后语
经过此次,小熙才更加理解连接上也要加上对应时区。