Cómo implementar varias tareas programadas en SpringBoot
El primero es relativamente simple
El segundo
@SpringBootApplication
/*
*? ¿Habilitar soporte para tareas programadas
*? Agregue @Scheduled al método correspondiente para declarar las tareas programadas que deben ejecutarse.
*/
@EnableScheduling
Aplicación de clase pública {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication
/*
*? ¿Habilitar soporte para tareas programadas
*? Agregue @Scheduled al método correspondiente para declarar las tareas programadas que deben ejecutarse.
*/
@EnableScheduling
Aplicación de clase pública {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
/* Crea una instancia de pojo ordinario en el contenedor Spring.
Si desea cambiar dinámicamente su valor, debe heredar SchedulingConfigurer
*/
AutoSchedule de clase pública? SchedulingConfigurer{
SimpleDateFormat final estático privado dateFormat = new SimpleDateFormat("HH:mm:ss");
Cadena final estático privado DEFAULT_CRON = "0/5 * * * *?";
cadena privada cron = DEFAULT_CRON;
@Override
configTasks public void(ScheduledTaskRegistrar taskRegistrar) {
//? ?Runnable (clase de interfaz de hilo) y CronTrigger (activador de tarea programada)
taskRegistrar.addTriggerTask(() -> {
/ / Business lógica de las tareas programadas
System.out.println("Modificación dinámica de los parámetros cron de las tareas programadas, hora actual: " + dateFormat.format(new Date()));
}, (triggerContext) -> {
// La tarea programada se activa y el ciclo de ejecución de la tarea programada se puede modificar
CronTrigger trigger = new CronTrigger(cron);
Fecha nextExecDate = trigger.nextExecutionTime(triggerContext);
return nextExecDate;
});
}
public void setCron( String cron) {
System.out.println("El cron actual="+this.cron+"->se cambiará a: "+cron);
this.cron = cron;
}
}
El tercer tipo
@RestController
@Component
clase pública CrudSchelud? {
//Utilice la clase threadPoolTaskScheduler para implementar la función de programación de tiempo de las tareas,
//Reescriba el disparador CronTrigger, pero la tarea se llama continuamente3
@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
private Schedu
ledFuture> futuro;
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
devolver nuevo ThreadPoolTaskScheduler();
}
@RequestMapping("/startCron")
public String startCron() {
futuro = threadPoolTaskScheduler.schedule(new MyRunnable(), new CronTrigger("0 /5 * * * * *"));
System.out.println("DynamicTask.startCron()");
return "startCron";
}
@RequestMapping("/stopCron")
public String stopCron() {
if (futuro! = nulo) {
future.cancel(true);
}
System.out.println("DynamicTask.stopCron()");
return "stopCron ";
}
@RequestMapping("/changeCron10")
cadena pública startCron10() {
stopCron();/ / Primero deténgase, luego comience.
future = threadPoolTaskScheduler.schedule(new MyRunnable(), new CronTrigger("*/10 * * * *"));
System out. .println("DynamicTask.startCron10()");
return "changeCron10";
}
la clase privada MyRunnable implementa Runnable {
@Override
public void run() {
System.out.println("DynamicTask.MyRunnable.run()," + nueva fecha()); p >
}
}
}