SpringBoot服务时间与linux服务器时间相差8小时

676 阅读1分钟

现象

SpringBoot打包的jar包部署后,发现日志中打印的时间正好与正确的时间相差了8小时,猜想是时区不对,在linux服务中使用date -R命令查看获得linux的时间是正常的,时区也是+0800,在java启动类内打印new Date(),结果是错误的

解决

1. 查看时区文件/etc/localtime

查看该文件的链接是指向哪个时区,我的是../usr/share/zoneinfo/UTC,问题就出在这里,我们需要的是上海时区,可执行 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime命令修改时区

2.添加启动参数-Duser.timezone=GMT+08

不管linux环境如何,在启动jar包时加入该参数强行指定时区,完整示例:

java -jar -Duser.timezone=GMT+08 myservice-0.0.1-SNAPSHOT.jar --server.port=8086

3.在SpringBoot启动类内添加如下代码

    @PostConstruct
   void setDefaultTimezone() {
      TimeZone.setDefault(TimeZone.getTimeZone( "Asia/Shanghai" ));
     // TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));  // 用这个也行
   }