Executar o encadeamento em java em horários específicos

Eu tenho um aplicativo da web que sincroniza com um database central quatro vezes por hora. O processo geralmente leva 2 minutos. Eu gostaria de executar este processo como um segmento em X: 55, X: 10, X: 25 e X: 40 para que os usuários saibam que em X: 00, X: 15, X: 30 e X: 45 eles têm uma cópia limpa do database. É apenas sobre gerenciar expectativas. Eu passei pelo executor em java.util.concurrent mas o agendamento é feito com o scheduleAtFixedRate que acredito não fornece garantia sobre quando isso é realmente executado em termos de horas. Eu poderia usar um primeiro atraso para lançar o Runnable modo que o primeiro fique próximo do horário de lançamento e agendado a cada 15 minutos, mas parece que isso provavelmente divergiria no tempo. Existe uma maneira mais fácil de agendar o segmento para executar 5 minutos antes de cada trimestre?

Você pode deixar o Runnable programar sua “próxima execução”.

Tal como,

 class Task implements Runnable { private final ScheduledExecutorService service; public Task(ScheduledExecutorService service){ this.service = service; } public void run(){ try{ //do stuff }finally{ //Prevent this task from stalling due to RuntimeExceptions. long untilNextInvocation = //calculate how many ms to next launch service.schedule(new Task(service),untilNextInvocation,TimeUnit.MILLISECONDS); } } } 

O quartzo seria um bom ajuste, já que você é aplicativo baseado na web. Ele fornecerá o agendamento baseado na hora que você precisa.

O Quartz é um serviço completo de agendamento de trabalhos de código aberto que pode ser integrado ou usado ao lado de praticamente qualquer aplicativo Java EE ou Java SE – do menor aplicativo independente ao maior sistema de comércio eletrônico. O quartzo pode ser usado para criar agendas simples ou complexas para executar dezenas, centenas ou até dezenas de milhares de trabalhos; jobs cujas tarefas são definidas como componentes Java padrão que podem executar virtualmente qualquer coisa que você possa programá-los para fazer. O Quartz Scheduler inclui muitos resources de class empresarial, como transactions JTA e clustering.

TimerTask lida com este caso.

Veja o cronograma (TimerTask, Data)

Se você não quer ter que continuar agendando os trabalhos, você pode querer olhar para uma ferramenta de agendamento de trabalho como o Quartz .