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