Java 中热更新时区数据(tzdb),无需升级或重启 JVM

问题描述 投票:0回答:1

我正在我的应用程序上开发一项新功能,需要更新时区信息(包括夏令时)。

据我所知,时区信息数据(tzdb)存储在JVM内部。所以我需要更新我的 JRE 以更新时区信息。一种方法是使用 TZ Updater 工具,但需要重新启动。我需要“热”更新 tzdb,而不需要重新启动 JVM。

对于某些时区,我们会在斋月开始前几天知道夏令时的变化。请参阅此页面上的摩洛哥示例。

当新的 TZ 数据发布时,不可能这么快地进行生产部署。

我的问题是: 有没有办法在 Spring Boot 应用程序上热更新 TZ/DST 信息?

我正在开发部署在 Kubernetes 上的 Spring Boot 应用程序。我的应用程序的容器映像是使用 jib 生成的,并以 Adoptium JDK 作为基础映像。

java spring timezone dst
1个回答
0
投票

最后我忘记了热更新,也许这是Java的限制。

要在不升级基础代码或 JVM 的情况下更新生产环境中的 tz 数据,我们将下载一个已编译的 tzdb.dat 文件(如在此 github 存储库 上建议的那样),然后在生产映像上替换这样的文件并推送新映像带有这样的标签

myapp:1.0.0+tzdb2024a

cd /opt/java/openjdk/lib
wget https://github.com/jeremywall/java-tzdb-builder/raw/main/releases/2024a/tzdb2024a.dat
mv tzdb2024a.dat tzdb.dat

我认为最好只更新 jdk 基础镜像,但在生产环境中并不总是可以这么快做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.