Existe uma implementação de cron-como de ScheduledExecutorService em Java?

StackOverflow https://stackoverflow.com/questions/469884

  •  19-08-2019
  •  | 
  •  

Pergunta

O ScheduledExecutorService em Java é bastante útil para repetir tarefas com intervalos fixos ou atraso fixo. Eu queria saber se existe uma coisa como o ScheduledExecutorService existente que permite que você especifique uma hora do dia para agendar a tarefa de, em vez de um intervalo ou seja, "Eu quero essa tarefa para o fogo às 10h de cada dia".

Eu sei que você pode conseguir isso com Quartz, mas eu prefiro não usar essa biblioteca se possível (que é uma grande biblioteca, mas eu prefiro não ter a dependência por alguns motivos).

Foi útil?

Solução

Você pode usar o Temporizador classe. Especificamente, scheduleAtFixedRate (tarefa TimerTask, Data firstTime, período longo). Onde você pode definir uma tarefa para iniciar às 10h em um determinado dia e repetir a cada 24 horas.

Outras dicas

Um pouco mais a pesquisa transformou-se CronExecutorService em HA-JDBC. Curiosamente, ele tem uma dependência em quartzo por sua CronExpression classe, mas é isso. Isso não é muito ruim.

Update: Eu fixo os links quebrados para apontar para novas versões, mas eu não sei se essa é a única dependência mais

ThreadPoolTaskScheduler, pode ser usado sempre que a administração rosca externa não é um requisito. Internamente, ele delega a um ScheduledExecutorService instância. ThreadPoolTaskScheduler implementos da Primavera TaskExecutor de interface também, para que uma única instância pode ser usado para execução assíncrona, bem como programado, e potencialmente recorrente, execuções.

Onde como CronTrigger () leva em cronExpression http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html

Para mais informações sobre esta solução referem docs Primavera: https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html

import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import java.util.Date;

public class CronTriggerSpringTest{
public static void main(String args[]){
    String cronExpression = "0/5 * * * * *";
    ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
    scheduler.initialize();
    scheduler.schedule(new Runnable() {
        @Override
        public void run() {
            System.out.println("Hello Date:"+new Date());
        }
    }, new CronTrigger(cronExpression));
}
}

Quando você usa scheduleAtFixedRate você fornecer um atraso. Assim, o atraso pode ser a diferença para 10 horas e período é de 24 horas. Isso poderia deslocar-se um pouco, mesmo com um temporizador de modo que você pode fazer é agendar uma tarefa que se agrega ao ScheduledExecutorService com um atraso apropriado cada vez.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top