場景
伺服器安裝JDK時,預設會有支援JDK版本對應的時區規則。但是時區規則可能會變化的,那如何保持時區規則是最新的呢?
TZUpdater 工具介紹
提供的
TZUpdater 工具
允許您使用更新的時區資料更新已安裝的 Java 開發工具包 (JDK) 和 Java 執行時環境 (JRE) 軟體,以適應不同國家/地區的夏令時 (DST) 更改。Oracle 依賴於透過 IANA 的時區資料庫公開提供的時區資料。
如果您無法使用 Oracle 最新的 JDK 或 JRE 更新版本,或者如果最新版本上的時區資料不是最新可用的,TZUpdater 工具提供了一種更新時區資料的方法,同時保持其他系統配置和依賴項不變。
TZUpdater 工具用法
TZUpdater 工具用於執行該工具的 JDK/JRE 軟體例項。每次執行都會修改 JDK/JRE 軟體。要將工具管理到 JDK/JRE 軟體的多個例項。
在安裝的 JDK/JRE 軟體上執行 TZUpdater 工具之前,您必須停止作業系統上的 JDK/JRE 軟體的任何正在執行的服務。
使用以下命令執行 TZUpdater 工具:
要成功更新時區資料,您應該確保您有足夠的許可權來修改 或 目錄。
如果未指定任何選項,則會顯示用法訊息。要更新時區資料,請使用或選項。
手動升級
注意:
1、在安裝的 JDK/JRE 軟體上執行 TZUpdater 工具之前,您必須停止作業系統上的 JDK/JRE 軟體的任何正在執行的服務。
2、要成功更新時區資料,您應該確保您有足夠的許可權來修改 或 目錄。(linux系統:JRE目錄要有寫許可權;windows系統:用管理員身份執行cmd)
3、如果系統上有多個JDK/JRE ,需要將該工具用於每個JDK/JRE中(每個JDK/JRE都要操作一遍)
4、更新成功後,要重新啟動此 JDK/JRE 例項上的應用程式服務(如果還沒更新,重啟下伺服器試試)
操作步驟:
1、下載Oracle官方提供的tzupdater。jar包;下載地址
www。oracle。com/java/techno…
把tzupdater。jar放到java目錄bin目錄下,比如
2、檢視當前時區資料庫版本,以windows為例,用管理員身份執行cmd,切換到tzupdater。jar對應的目錄:
3、線上更新,以windows為例,用管理員身份執行cmd,切換到tzupdater。jar對應的目錄:
(第3種和第4種更新方式任選一種)
如圖所示,已經更新成功到了tzdata2021a版本了。
更新後的檔案是放在
jre/lib/tzdb.dat
,如圖所示,它有備份歷史的版本。
4、離線更新:要先下載最新的時區資料,下載地址:
data。iana。org/time-zones/…
以windows為例,用管理員身份執行cmd。切換到tzupdater。jar對應的目錄:
注:
windows建議放在C盤根目錄下,路徑目錄也不要有中文;
用管理員身份執行cmd(需要寫許可權);
如上面的命令所示,file後面的/是3個
5、以上執行完後,用第2步的檢視當前時區資料庫版本命令,檢視是否更新成功。
服務自動化升級
思路步驟:
1、設定定時任務(作業系統配置就行),執行tzupdater 更新時區的命令指令碼;
2、新開一個時區服務,用來對外提供時區和夏令時規則讀取服務,獨立部署;
3、在時區服務中,寫個同步按鈕,用來執行tzupdater 更新時區的命令指令碼;
4、在時區服務中,將timeZone資料定時寫到自定義的時區表中。提供維護功能,可以自定義新增修改刪除timeZone資料。
此思路的好處:
1、其他服務不需要停止服務來更新時間,直接透過呼叫時區服務的資料,可保證獲取到最新的時區資料;
2、自動化的好處,避免了手動維護時區的繁瑣,人工介入有引發問題的風險;
3、時區服務和其他業務服務是拆分的,方便未來的擴充套件。
參考:
TZUpdater :www。oracle。com/java/techno…
IANA時區資料版本:data。iana。org/time-zones/…
JRE 軟體中的時區資料版本:www。oracle。com/java/techno…