美文网首页
java/springboot/mysql时区问题解决方案

java/springboot/mysql时区问题解决方案

作者: 诗错亦染瑾 | 来源:发表于2019-04-04 11:13 被阅读0次

    解决步骤:

    先理清楚逻辑

    数据从mysql查出-->进入docker(没容器化跳过)-->进入相应的应用程序(比如java或者框架springboot之类的)-->程序处理完输出返回给前端或者页面-->展示

    第一步:先查mysql

    所以先进入mysql控制台,select now(),时区没问题则这里显示的时间和当前中国时间一致,或者show variables like '%time_zone%';


    image.png

    如果时区不对可以设置

    set global time_zone = '+8:00';
    flush privileges;
    

    不过重启会失效,想不失效可以改my.cnf然后重启mysql

    第二步:进入docker容器看时区对不对(如果不是容器化跳过)

    先用docker ps 查看容器id,拿到id 进去相应容器
    命令为

    docker exec -ti 7a542556a73a /bin/bash  
    

    接下来在容器内查看当前时间是否和中国时间一致

    date -R
    

    如果不一致需要在Dockerfile时加上

    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    

    第三步:应用程序时区

    比如java代码中new出的date查看,如果不是中国时区,可以在Dockerfile中加上

    ENV JAVA_OPTS $JAVA_OPTS -Duser.timezone=GMT+08
    

    如果是框架的时区问题,那要查询对应框架的时区设置

    比如springboot的时区设置如下

    public class SpringBootApplication{
        public static void main(String[] args) {
            TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
            SpringApplication.run(SpringBootApplication.class, args);
        }
    }
    

    除此之外,程序处理完后需要返回前端也有时区差异

    springboot中需要在application.yml中设置

    spring:
      jackson:
        time-zone: Asia/Shanghai
    

    第四步:至此后台时区一致,前端展示基本不会有问题,不多叙述

    欢迎大家加入Java技术群


    1544106895022.png

    相关文章

      网友评论

          本文标题:java/springboot/mysql时区问题解决方案

          本文链接:https://www.haomeiwen.com/subject/fwqfiqtx.html