springboot項目在容器中啟動日志時間和系統時間不一致


問題描述如標題。

解決過程如下:

就算在容器里面使用: date -R 查看時間時區也是東八區正常的。

 

 但是對於JVM所使用的時區來說它卻不認這個時區的。JVM所使用的時區有一個順序的加載。

鏡像的操作系統是:

 

 

JVM讀取時區文件順序依次為:$TZ > /etc/timezone > /etc/localtime > 默認GMT ,跟文件/etc/sysconfig/clock 無關。

在這里用的容器里面是沒有  $TZ系統變量的。

 

 然后看下 cd /etc看下有沒有  /etc/timezone 

 

 發現也是沒有的。

最后看下/etc下面有沒有localtime   發現有而且指向UTC時區,這就是為什么時間對不上的原因。

 

 

解決辦法:啟動腳本里加上:

 

 -Duser.timezone=Asia/Shanghai -Dfile.encoding=utf8  多加的編碼是好習慣的問題。

默認GMT說明:java.util.TimeZone類中getDefault方法的源代碼顯示,它最終是會調用sun.util.calendar.ZoneInfo類的getTimeZone 方法。這個方法為需要的時間區域返回一個作為ID的String參數。這個默認的時間區域ID是從 user.timezone (system)屬性那里得到。如果user.timezone沒有定義,它就會嘗試從user.country和java.home (System)屬性來得到ID。 如果它沒有成功找到一個時間區域ID,它就會使用一個"fallback" 的GMT值。換句話說, 如果它沒有計算出你的時間區域ID,它將使用GMT作為你默認的時間區域。

 

參考博文:

(13條消息) JVM加載TimeZone讀取文件優先級實戰分析_weixin_34072159的博客-CSDN博客 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM