Actualizar los archivos de zonas horarias en microservicios Java
Sumario
Antecedentes
Cuando la zona horaria de un microservicio esta correcta pero la hora esta incorrecta lo más probable es que se deba a que los archivos de definición de las zonas horarias están desactualizados.
La información de las zonas horarias se basa en los datos de la base de datos IANA de zonas horarias.
Oracle ofrece una herramienta que permite actualizar estas bases de datos en sus versiones de JDK y JRE
Para las máquinas virtuales como OpenJDK, se puede emplear la herramienta de fuente abierta ZIUpdater
Herramientas requeridas
IANA
La entidad Internet Assigned Numbers Authority desempeña un papel esencial en la gestión de Internet, ya que es responsable de asignar nombres y sistemas de números únicos que se usan de acuerdo con los estándares técnicos –protocolo de red– de Internet y constituyen la base del direccionamiento de páginas web.
La IANA coordina la reserva global de números IP y de los conocidos como números de sistema autónomo (en inglés Autonomous System Numbers, ASN),
que se asignan en bloques de direcciones a los cinco registros regionales de Internet (RIR). A su vez, RIR pone a disposición de los registros locales
(LIR) y nacionales (NIR) bloques de direcciones más pequeños que se conceden a los proveedores de servicios de Internet.
El ámbito de competencia de cada RIR.
RIR :Ámbito de competencia
AFRINIC :África
APNIC :Asia, Australia y Oceanía
ARIN :Canadá, EE.UU y algunas islas del Caribe
LACNIC :Latinoamérica y algunas islas del Caribe
RIPE NCC :Europa, Oriente Medio y partes de Asia Central
Time Zone Database
La base de datos de zona horaria (a menudo llamada tz o zoneinfo ) contiene código y datos que representan el historial de la hora local para muchas ubicaciones representativas en todo el mundo.
Se actualiza periódicamente para reflejar los cambios realizados por los órganos políticos en los límites de las zonas horarias, las compensaciones UTC y las reglas de horario de verano.
Su procedimiento de gestión está documentado en BCP 175: Procedimientos para el mantenimiento de la base de datos de zonas horarias .
La última versión a Junio de 2023 es la siguiente:
tzdb-2023c.tar.lz
tzdata2023c.tar.gz
tzcode2023c.tar.gz
ZIUpdater Time Zone Tool
ZIUpdater proporciona un subconjunto funcional de la herramienta equivalente de Oracle TZUpdater.
La versión actual de ZIUpdater actualiza la información de zona horaria obtenida de cualquier copia descargada de la base de datos de zona horaria de la IANA.
ZIUpdater realiza un paso de compilación, transformando la base de datos de IANA en un conjunto de archivos compatible con JDK, luego lo aplica al árbol de archivos
del JDK/JRE invocado. Puede usar ZIUpdater en cualquier plataforma (Windows, Linux, macOS, etc.) donde haya instalado Java. Por diseño, funciona con Azul Zulu Builds
de OpenJDK y Azul Zulu Prime Builds de OpenJDK, pero ZIUpdater también se probó con éxito contra OpenJDK y Oracle JDK.
Cada versión de Azul Zulu incluye una base de datos de zonas horarias de IANA actualizada. Sin embargo, si desea actualizar los archivos de zona horaria en una
instalación existente de Azul Zulu sin instalar una nueva versión, puede usar la herramienta ZIUpdater.
Siga estos pasos para actualizar los archivos de zona horaria.
Descargue ZIUpdater desde
https://www.azul.com/products/open-source-tools/ziupdater-time-zone-tool/Descomprima el archivo descargado. La herramienta es un archivo Java (
ziupdater-1.1.1.1.jar
), que es multiplataforma y admite todas las versiones de Azul Zulu.Descargue la última base de datos de zonas horarias:
https://data.iana.org/time-zones/tzdata-latest.tar.gz(Solo para Azul Zulu 7) Convierta los tzdata de IANA al
rearguard
formato.A partir de la versión 2018e, la distribución Time Zone utiliza un nuevo formato de vanguardia. La herramienta ZIUpdater no es compatible con este formato para Azul Zulu 7.
rearguard
formato.Detenga cualquier programa que se esté ejecutando
java
desde su instalación de Azul Zulu.Ejecute la herramienta:
java -jar ziupdater-1.1.1.1.jar -l file://<path to tzdata archive>
Configuración del Dockerfile
En el directorio raíz del proyecto poner los archivos siguientes (Los nombres pueden variar ligeramente dependiendo la versión):
A) Archivo con la base de datos de zonas horarias:
tzdata2023c.tar.gz
B) archivo con la aplicación ZIUpdater para actualizar las máquinas virtuales:
ziupdater-1.1.1.1.jar
En el archivo Dockerfile en la parte donde se configuran las dependencias copiar ambos archivos:
COPY tzdata2023c.tar.gz .
COPY ziupdater-1.1.1.1.jar .
En el archivo Dockerfile en el último stage, copiar ambos archivos desde el primer stage.
COPY --from=build /ziupdater-1.1.1.1.jar /ziupdater-1.1.1.1.jar
COPY --from=build /tzdata2023c.tar.gz /tzdata2023c.tar.gz
Nota: la ruta puede variar.
En el archivo Dockerfile en el último stage, antes de ejecutar la máquina virtual, poner el comando siguiente:
RUN java -jar /ziupdater-1.1.1.1.jar -l file:///tzdata2023c.tar.gz
Nota: el comando de ejecución, las rutas donde están ubicados los archivos y los nombres exactos pueden variar dependiendo de como estén las rutas en el Dockerfile, y como está configurada la imagen. Estos ejemplos están hechos en un Dockerfile con los datos siguientes:
ARG BUILD_IMAGE=openjdk:8
ARG RUNTIME_IMAGE=openjdk:8