【docker】centOS7上部署的mysql和spring boot服务,要求,mysql的时间、java程序服务的时间和宿主机的时间彻底保持一致【修改mysql时区,临时和永久】【修改sprin

 

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

===============================================================================java

一共五步:mysql

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

  1.查看宿主机时间sql

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

  3.修改spring boot配置,增长时区设置浏览器

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

================================================================================app

 

前提:框架

首先,修改宿主机/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实例:http://www.javashuo.com/article/p-bumtqjbk-k.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命令 加参数便可解决【红色部分须要保证文章的前提部分已经作了】【红色参数意义:http://www.javashuo.com/article/p-wpnjskde-gh.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服务 保证三位一体时间一致的问题解决!!!!

相关文章
相关标签/搜索