1
votes

Comment créer plusieurs instances d'une classe de planificateur dans Spring Boot?

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.


1 commentaires

Avez-vous ajouté @EnableScheduling à votre configuration? De plus, du code peut être utile ici.


3 Réponses :


0
votes

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() {

    }
}


1 commentaires

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



0
votes

@ 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


1 commentaires

C'est une bonne approche mais j'ai besoin de plusieurs instances d'un seul planificateur



0
votes

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.


0 commentaires