Planification dynamique des tâches au printemps
Contexte :
La bibliothèque Spring Scheduling simplifie le processus de planifier des tâches à intervalles réguliers à l'aide d'annotations (@Scheduled). Cependant, il devient parfois nécessaire d’ajuster dynamiquement l’heure planifiée sans redéployer l’application. Ceci peut être réalisé à l'aide du mécanisme Trigger.
Utiliser un Trigger :
Un Trigger vous permet de calculer à la volée la prochaine heure d'exécution d'une tâche planifiée. Cette approche contourne les limitations liées à l'utilisation d'annotations pour la planification dynamique. Voici comment vous pouvez l'implémenter :
Exemple :
Dans cet exemple, un déclencheur personnalisé est créé pour déterminer dynamiquement la prochaine heure d'exécution en fonction d'une valeur de propriété obtenue à partir de l'environnement.
@Configuration @EnableScheduling public class MyAppConfig implements SchedulingConfigurer { @Autowired Environment env; @Bean public MyBean myBean() { return new MyBean(); } @Bean(destroyMethod = "shutdown") public Executor taskExecutor() { return Executors.newScheduledThreadPool(100); } @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(taskExecutor()); taskRegistrar.addTriggerTask( new Runnable() { @Override public void run() { myBean().getSchedule(); } }, new Trigger() { @Override public Date nextExecutionTime(TriggerContext triggerContext) { Calendar nextExecutionTime = new GregorianCalendar(); Date lastActualExecutionTime = triggerContext.lastActualExecutionTime(); nextExecutionTime.setTime(lastActualExecutionTime != null ? lastActualExecutionTime : new Date()); nextExecutionTime.add(Calendar.MILLISECOND, env.getProperty("myRate", Integer.class)); // Obtain value programmatically return nextExecutionTime.getTime(); } } ); } }
Dans cette configuration :
En utilisant un déclencheur, vous pouvez ajuster dynamiquement l'heure planifiée en fonction de toute logique ou valeur disponible au moment de l'exécution, offrant ainsi flexibilité et contrôle sur la tâche. planification.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!