SpringBoot和Java Web应用在Linux系统上的时间问题

最近同事们接二连三的Springboot中遇到时间相关的问题,在这里总结下。

数据库内的时间就不对,比如currrent_timestamp后时间不是当前时间差8个小时

对于这个问题其实没有什么好纠结的就是mysql的时区不对或者系统时区不对,默认情况下mysql是使用system timezone的,如果systemtimezone就有问题,当然mysql的timezone也会有问题。

修改Linux系统时区的方式如下:

    cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime
    
这里要说一下的是关于对于Docker容器也会有时区问题,解决的方法如下:
     docker cp /usr/share/zoneinfo/$主时区/$次时区 container:/etc/localtime
     docker restart [container_name]

数据库中查询的出来的时间正确,打印到日志文件后错误,或者日志文件整个时间不对

这个问题的主要原因在于默认SpringBoot采用Jackson来处理json,在市区是可能会采用其他市区进行,因此在配置文件中可以设置:
spring.jackson.time-zone=GMT+8

日志中的日期正确,json序列化后时间发生错误

发生日志文件中错误的原因主要是jvm有自己的时区,因为系统缺少/etc/sysconfig/clock文件,导致时间不对。解决方法有如下两种:

方法1:手工指定jvm的市区
    java -Duser.timezone=GMT+08
    
方法2:创建或者修改/etc/sysconfig/clock
zone:Asia/Shanghai
UTC:false

明明设置了jsonfiled注解,但是时间还是被序列化成了unix的时间戳

这个主要使用了ObjectMapper引起的,直接上代码
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

Lokie博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论
  • 本博客使用免费开源的 laravel-bjyblog v5.5.1.1 搭建 © 2014-2018 lokie.wang 版权所有 ICP证:沪ICP备18016993号
  • 联系邮箱:kitche1985@hotmail.com