J'ai une classe contenant la méthode annotée @Scheduled
.
Je souhaite créer plusieurs instances d'une classe dans l'application Spring Boot afin de pouvoir exécuter plusieurs tâches pendant la période spécifiée.
J'ai cherché sur Google et essayé de créer un nouvel objet, mais la planification n'a pas fonctionné.
Remarque: je transmettrai les éléments à exécuter au moment de l'exécution pour l'instance respective.
3 Réponses :
Vous pouvez créer une classe avec plusieurs méthodes pour planifier vos travaux en même temps, en faisant le même travail.
@Component public class Job { @Scheduled(initialDelay = 1000, fixedDelay = 60000) public void job1() { jobWork(); } @Scheduled(initialDelay = 1000, fixedDelay = 60000) public void job2() { jobWork(); } private void jobWork() { } }
Cela fonctionnera, mais souvenez-vous de deux choses: @EnableScheduling
annotation pour la configuration (peut être dans la classe principale) et aussi spring.task.scheduling.pool.size = X
dans votre fichier application.properties
@ Scheduled est une annotation repatable afin que vous puissiez ajouter plusieurs @Scheduled
dans la même méthode:
@Scheduled(initialDelay = 1000, fixedDelay = 60000) @Scheduled(initialDelay = 1000, fixedDelay = 60000) public void jobWork() { jobWork(); }
@Repeatable (value = Schedules.class)
Voir aussi Duplication sur @Scheduled
La répétition d'annotations comme @Scheduled autorise plusieurs annotations
C'est une bonne approche mais j'ai besoin de plusieurs instances d'un seul planificateur
Voici la réponse,
J'ai implémenté ApplicationContextAware
@Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { for (int i =0;i<4;i++) { ((ConfigurableApplicationContext) applicationContext).getBeanFactory() .registerSingleton("New Instance " + i, new SchedularJob()); } }
Cela créera 4 instances de la classe SchedularJob et 4 planificateurs fonctionneront indépendamment.
Avez-vous ajouté @EnableScheduling à votre configuration? De plus, du code peut être utile ici.