¿Existe una implementación similar a cron de ScheduledExecutorService en Java?

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

  •  19-08-2019
  •  | 
  •  

Pregunta

El ScheduledExecutorService en Java es bastante útil para repetir tareas con intervalos fijos o retrasos fijos. Me preguntaba si hay algo como el ScheduledExecutorService existente que le permite especificar una hora del día para programar la tarea, en lugar de un intervalo, es decir, `` Quiero que esta tarea se active a las 10 a.m. cada día ''.

Sé que puedes lograr esto con Quartz, pero prefiero no usar esa biblioteca si es posible (es una gran biblioteca, pero prefiero no tener la dependencia por varias razones).

¿Fue útil?

Solución

Puede usar el Temporizador clase. Específicamente, scheduleAtFixedRate (tarea TimerTask, Fecha firstTime, período largo). Donde puede configurar una tarea para comenzar a las 10 a.m. en un día en particular y repetirla cada 24 horas.

Otros consejos

Ha aparecido un poco más de búsqueda CronExecutorService en HA-JDBC. Curiosamente, tiene una dependencia en Quartz para su CronExpression clase, pero eso es todo. Eso no está tan mal.

Actualización: he arreglado los enlaces rotos para que apunten a nuevas versiones, pero no sé si esa es la única dependencia más

ThreadPoolTaskScheduler, se puede utilizar siempre que la gestión externa de subprocesos no sea un requisito. Internamente, delega a una instancia ScheduledExecutorService . ThreadPoolTaskScheduler implementa también la interfaz Spring & # 8217; s TaskExecutor , de modo que se puede usar una sola instancia para la ejecución asincrónica, así como ejecuciones programadas y potencialmente recurrentes.

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

Para obtener más información sobre esta solución, consulte los documentos de Spring: 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));
}
}

Cuando usa scheduleAtFixedRate proporciona un retraso. Por lo tanto, el retraso puede ser la diferencia hasta las 10 a.m. y el período es de 24 horas. Esto podría variar un poco, incluso con un temporizador, por lo que lo que puede hacer es programar una tarea que se agregue al ScheduledExecutorService con un retraso apropiado cada vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top