scheduled minutes expressions examples example every java spring spring-scheduled

java - minutes - spring boot cron scheduler example



¿Cómo evitar horarios superpuestos en primavera? (2)

@Scheduled(fixedDelay = 5000) public void myJob() { Thread.sleep(12000); }

¿Cómo puedo evitar que este trabajo de primavera se ejecute si la rutina anterior aún no está terminada?


Con fixedDelay , el período se mide después de la finalización del trabajo, por lo que no se preocupe.


Por defecto, Spring usa un Ejecutor de un solo hilo. así que no hay dos tareas programadas que se superpongan. incluso dos métodos @Scheduled en clases completamente no relacionadas no se superpondrán simplemente porque hay un solo hilo para ejecutar todas las tareas @Scheduled.

además, incluso si reemplaza el Ejecutor predeterminado con un ejecutor basado en grupo de subprocesos, esos Ejecutores generalmente demorarán la ejecución de una instancia de tarea hasta que la instancia programada anteriormente se complete. Esto es cierto para las programaciones basadas en FixDelay, fixedInterval y cron . por ejemplo, esta configuración de primavera creará un ScheduledThreadPoolExecutor que usa un conjunto de subprocesos, pero no permite instancias concurrentes de la misma programación tal como lo desea:

@Configuration @EnableScheduling ... public class MySpringJavaConfig { @Bean(destroyMethod = "shutdown") public Executor taskScheduler() { return Executors.newScheduledThreadPool(5); } ... }

Aquí está el javadoc para ScheduledThreadPoolExecutor :: scheduleAtFixedRate que especifica:

Si cualquier ejecución de esta tarea toma más tiempo que su período, las ejecuciones posteriores pueden comenzar tarde, pero no se ejecutarán simultáneamente.

nota: esta funcionalidad no es válida para las tareas de @Async . spring creará tantas instancias concurrentes de las que sean necesarias (si hay suficientes subprocesos en el grupo).