• 【docker】centOS7上部署的mysql和spring boot服务,要求,mysql的时间、java程序服务的时间和宿主机的时间完全保持一致【修改mysql时区,临时和永久】【修改spring boot配置文件时区】【修改docker启动spring boot实例程序时区】


    要求:centOS7上部署的mysql和spring boot服务,要求,mysql的时间、java程序服务的时间和宿主机的时间完全保持一致;

    ===============================================================================

    一共五步:

      前提:修改宿主机的localtime和timezone文件的内容

      1.查看宿主机时间

      2.修改mysql时区【有临时和永久修改两种方式】

      3.修改spring boot配置,增加时区设置

      4. 修改docker启动spring boot服务命令,设置java程序时区

    ================================================================================

    前提:

    首先,修改宿主机/etc/localtime 文件,只要保证文件中的时区设置是CST-8 即可

    【乱码问题不用管,只需要保证文件中时区设置是CST-8即可】

    vi /etc/localtime

     接着,修改宿主机的/etc/timezone 文件,保证文件中内容如下:

    Asia/Shanghai

    可能/etc目录下并没有timezone 文件,而是timezone 目录,把timezone 目录删掉,创建timezone 文件,并粘贴上面的内容即可。

    关于【GMT,UTC,DST,CST, ISO时间的区别,可以自己查询了解】

    ================================================================================

    1.首先确定 查看宿主机的时间

    date

    2.docker启动mysql在宿主机上后,使用navicat连接mysql后,查看mysql时间【docker启动mysql实例:https://www.cnblogs.com/sxdcgaq8080/p/9199406.html

    select now();

    可以看到mysql虽然是运行在宿主机上,但是时间并不正确,相差了8个小时。

    ========================================临时生效,重启失效================================================

    解决方法:依次执行如下三个语句在navicat中【修改时区】【注意;号不要丢】

    > set global time_zone = '+8:00'; ##修改mysql全局时区为北京时间,即我们所在的东8区
    > set time_zone = '+8:00'; ##修改当前会话时区
    > flush privileges; #立即生效

    执行完成再查看时间:【时区修改完成】

    =====================================永久生效================================================= 

    当然以上的方法只是临时的修改了mysql的时区,如果重启mysql以后,就会失效

    想要永久解决这个问题,可以通过修改docker启动mysql命令 加参数即可解决【红色部分需要保证文章的前提部分已经做了】【红色参数意义:https://www.cnblogs.com/sxdcgaq8080/p/10065068.html

    docker run -p 33061:3306 --name mysql  --restart=always -e MYSQL_ROOT_PASSWORD=pisen  -v /etc/localtime:/etc/localtime:ro  -v /etc/timezone:/etc/timezone:ro  -d mysql:5.7

    3.为了保证spring boot服务本身java程序没有问题。

    需要在配置文件application.properties中增加配置:

    spring.jackson.time-zone=GMT+8

    原因是因为:

    spring-boot中对于@RestController或者@Controller+@ResponseBody注解的接口方法的返回值默认是Json格式,

    所以当对于date类型的数据,在返回浏览器端是会被spring-boot默认的Jackson框架转换,而Jackson框架默认的时区GMT(相对于中国是少了8小时)。

    4.最后,在打包了服务为jar包上传到服务器上后

    使用docker部署,仅需要增加两个配置在启动命令,即可解决docker容器时区与时间的问题

    对比一下【最简单的启动命令】

    docker run --name swapping -itd --net=host  swapping

    增加时间配置【解决时区问题的启动命令】【红色部分需要保证文章的前提部分已经做了】

    docker run --name swapping -itd --net=host -v /etc/localtime:/etc/localtime:ro  -v /etc/timezone:/etc/timezone:ro  swapping

    启动以后,访问宿主机时间:

     进入docker容器,这个spring boot服务的实例中,查看时间

     

    时间一致。

    docker运行mysql+spring boot服务 保证三位一体时间一致的问题解决!!!!

  • 相关阅读:
    GDI+学习之------色彩与图像
    2015小米暑期实习笔试题_懂二进制(位运算)
    拷贝构造函数和赋值函数
    HDU
    react-router中,<switch>
    Navicat for MySQL
    maven项目创建3 (依赖版本冲突)
    maven项目创建2
    maven项目创建
    Eclipse 开发环境修改及MAVEN配置
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/10057385.html
Copyright © 2020-2023  润新知