我正在我的应用程序上开发一项新功能,需要更新时区信息(包括夏令时)。
据我所知,时区信息数据(tzdb)存储在JVM内部。所以我需要更新我的 JRE 以更新时区信息。一种方法是使用 TZ Updater 工具,但需要重新启动。我需要“热”更新 tzdb,而不需要重新启动 JVM。
对于某些时区,我们会在斋月开始前几天知道夏令时的变化。请参阅此页面上的摩洛哥示例。
当新的 TZ 数据发布时,不可能这么快地进行生产部署。
我的问题是: 有没有办法在 Spring Boot 应用程序上热更新 TZ/DST 信息?
我正在开发部署在 Kubernetes 上的 Spring Boot 应用程序。我的应用程序的容器映像是使用 jib 生成的,并以 Adoptium JDK 作为基础映像。
最后我忘记了热更新,也许这是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 基础镜像,但在生产环境中并不总是可以这么快做到这一点。