环境
- jdk11
- mysql 8.0
- docker部署的
问题
突然发现页面上的数据比数据库的时间差了八个小时,然后我就开始排查问题。
首先看数据库的信息,发现时间都是没错的。
然后看一下ymal文件,是否是数据源链接写的有问题。
spring:
datasource:
url: jdbc:mysql://192.168.65.128:3306/work?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
发现也是没问题的。
接着,看一下web前端。打开控制台,发现后端传过来的json串里面的数据就比DB中的时间少了八个小时。
发现是JSON序列化的问题。
在配置文件中加上即可。
然后重新部署。
结果发现ok,时间正确。
Jackson 是一个用于 JSON 序列化和反序列化的 Java 库。当您在 Jackson 中配置特定的日期格式和时区时,它会影响应用程序中日期和时间值的处理和显示。
在您的情况下,当您将日期格式设置为 “yyyy-MM-dd HH:mm:ss”,时区设置为 “GMT+8” 时,Jackson 会根据这个格式和时区格式化和解析日期和时间值。这样的对齐使得前端正确显示时间,与 Jackson 中配置的时区一致。
当您移除这些配置时,Jackson 会使用其系统范围的设置或 JVM 的默认设置来处理日期格式和时区。如果这些默认设置与 GMT+8 不同,就会导致前端接收到的数据存在8小时的时间差。
为了确保应用程序中日期和时间的一致性处理,特别是涉及时区时,建议在 Jackson 中使用符合应用程序需求的正确日期格式和时区设置。