《JDK原始碼分析》時區的規則發生變化時,如何同步時區

場景

伺服器安裝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目錄下,比如

《JDK原始碼分析》時區的規則發生變化時,如何同步時區

2、檢視當前時區資料庫版本,以windows為例,用管理員身份執行cmd,切換到tzupdater。jar對應的目錄:

3、線上更新,以windows為例,用管理員身份執行cmd,切換到tzupdater。jar對應的目錄:

(第3種和第4種更新方式任選一種)

如圖所示,已經更新成功到了tzdata2021a版本了。

更新後的檔案是放在

jre/lib/tzdb.dat

,如圖所示,它有備份歷史的版本。

《JDK原始碼分析》時區的規則發生變化時,如何同步時區

4、離線更新:要先下載最新的時區資料,下載地址:

data。iana。org/time-zones/…

《JDK原始碼分析》時區的規則發生變化時,如何同步時區

以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…

TAG: JDKJRE時區更新TZUpdater