Prévue
Quand le printemps processus d' Scheduled
, il va parcourir chaque méthode annotée cette annotation et à organiser les tâches par les fèves de la source suivante montre:
private final Map<Object, Set<ScheduledTask>> scheduledTasks =
new IdentityHashMap<Object, Set<ScheduledTask>>(16);
Annuler
Si vous voulez juste pour annuler l'une répétition de la tâche planifiée, vous pouvez faire comme suit (ici est un exécutable démo dans mon repo):
@Autowired
private ScheduledAnnotationBeanPostProcessor postProcessor;
@Autowired
private TestSchedule testSchedule;
public void later() {
postProcessor.postProcessBeforeDestruction(test, "testSchedule");
}
Avis
Il va trouver le les haricots de l' ScheduledTask
et annuler un par un. Ce qui doit être remarqué, c'est qu'il sera également l'arrêt de la cours d'exécution de la méthode (en tant que postProcessBeforeDestruction
source montre).
synchronized (this.scheduledTasks) {
tasks = this.scheduledTasks.remove(bean); // remove from future running
}
if (tasks != null) {
for (ScheduledTask task : tasks) {
task.cancel(); // cancel current running method
}
}