要求: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服務 保證三位一體時間一致的問題解決!!!!