Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Rodar programa Java automáticamente.

Olá,

Gostaria de saber se é possível subir a imagem e logo de inicio rodar um programa em Java automaticamente que altere a data e hora.

Por exemplo tenho uma imagem chamada Java8, ela possuí o Debian e o JDK 8 configurados. Quero assim que ela suba que execute um programa chamado TimeZone.class e esse altere a data e local para São Paulo, porque por padrão o Debian está subindo o TimeZone UTC.

Nome da Imagem no Docker: Java:8

Abaixo o código do programa.

package br.org.cap.main;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;

/**
 * Created by renato on 08/02/16.
 */
public class TimeZoneTest {

    public static void main (String[] args) {
        System.out.println("Agora: " + Calendar.getInstance().getTime());
        System.out.println("====================================");
        System.out.println("user.timezone="+ System.getProperty("user.timezone"));
        System.out.println("TimeZone.getDefault=" + TimeZone.getDefault());

        TimeZone tz = TimeZone.getTimeZone("America/Sao_Paulo");
        TimeZone.setDefault(tz);
        Calendar ca = GregorianCalendar.getInstance(tz);
        System.out.println("====================================");
        System.out.println("Depois: " + ca.getTime());

    }
}
2 respostas
solução!

Bom dia Renato, tudo bem?

Se você copiar o programa para a imagem do docker, e depois executá-lo, a modificação ficará no sistema, então faz sentido funcionar.

Cuidado que o setTimezone não diz no javadoc que altera a timezone do sistema operacional: https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html#setDefault(java.util.TimeZone)

Ele altera o retorno do método getDefault, mas não necessariamente o OS.

Googlando, em geral as pessoas parecem fazer:

ENV TZ=America/Sao_Paulo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Em geral, ao inves de usar Java, usa-se o bash para configurar a máquina.

Abraço

Obrigado Guilherme,

No final das contas eu resolvi o problema utilizando o Dockerfile, onde eu configuro ele para alterar o TimeZone e depois peço para executar o programa acima, para ver se funcionou.

Exemplo:

VOLUME /etc/localtime:/etc/localtime:ro ENV TZ=America/Sao_Paulo RUN echo "$TZ" > /etc/timezone

RUN bash -c 'touch /TimeZoneTest.class'

Agradeço pelo contato, e gostei muito do curso de certificação Java, você explicou muito bem alguns pontos.