【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服务 保证三位一体时间一致的问题解决!!!!

 

posted @ 2018-12-03 11:16  Angel挤一挤  阅读(1414)  评论(0编辑  收藏  举报