Comment éviter le chevauchement des horaires de Printemps?
-
21-12-2019 - |
Question
@Scheduled(fixedDelay = 5000)
public void myJob() {
Thread.sleep(12000);
}
Comment puis-je éviter ce printemps de l'emploi à partir de l'exécution si la routine n'est pas encore fini?
La solution
Avec fixedDelay
, la période est mesurée après l'achèvement de travail, donc pas de soucis.
Autres conseils
Par défaut, le ressort utilise un exécuteur unique à filetage. Donc, aucune tâche de deux @schedulée ne se chevauchent jamais. Même deux méthodes @schedulées dans des classes entièrement non liées ne se chevauchent pas simplement parce que
En outre, même si vous remplacez l'exécuteur par défaut avec un exécuteur basée sur la piscine de thread, ces exécuteurs retarderont généralement l'exécution d'une instance de tâche jusqu'à ce que l'instance précédemment planifiée soit terminée. Ceci est vrai pour fixeDelay, communInterval et cron . Par exemple, cette configuration de ressort créera un
@Configuration
@EnableScheduling
...
public class MySpringJavaConfig {
@Bean(destroyMethod = "shutdown")
public Executor taskScheduler() {
return Executors.newScheduledThreadPool(5);
}
...
}
Voici le Javadoc pour planifiéeTheadpoolEcutor :: planifiantAtfixeDrate qui spécifie:
Si une exécution de cette tâche prend plus de temps que sa période, les exécutions ultérieures peuvent commencer tardivement, mais ne seront pas exécutées simultanément.
Remarque: cette fonctionnalité ne contient pas de vrai pour les tâches