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