web-dev-qa-db-fra.com

Quel est le meilleur moyen de planifier une tâche dans une application de démarrage de printemps

Je suis en train de développer une application basée sur Spring-Boot. 

Je sais que des annotations telles que @Scheduled peuvent planifier des tâches. Étant donné que les utilisateurs de mon application veulent envoyer des mails à une heure différente et n'envoyer qu'une seule fois.

J'ai déjà lu le post Tâche de planification de Spring - ne s'exécute qu'une seule fois ,

De cette façon, une fois que l'utilisateur a planifié l'envoi d'un courrier électronique, je dois "créer" un nouvel exécuteur local pour sa tâche.

Alors, y a-t-il de meilleurs moyens?

17
Exia

vous devriez utiliser quartz-scheduler et send mails at different time and send only once.- mettez ceci en tant que logique applicative dans votre code . Veuillez vous reporter à l'intégration print -quartz de démarrage initial https://github.com/davidkiss/spring-boot-quartz-demo

9
Pankaj Pandey

Le moyen le plus simple de planifier des tâches dans Spring consiste à créer une méthode annotée par @Scheduled dans le bean géré Spring. Il a également requis @EnableScheduling dans toutes les classes @Configuration.

Tutoriel de printemps

Vous pouvez utiliser crontab dans @Scheduled 

 private AtomicInteger counter = new AtomicInteger(0);

@Scheduled(cron = "*/2 * * * * *")
public void cronJob() {
    int jobId = counter.incrementAndGet();
    System.out.println("Job " + new Date() + ", jobId: " + jobId);
}
13
Satish Kr

Vous pouvez utiliser Quartz Scheduler .

Quartz est une bibliothèque de planification de travaux open source riche en fonctionnalités qui peut être intégrée dans pratiquement toutes les applications Java, de la plus petite application autonome au plus grand système de commerce électronique. Quartz peut être utilisé pour créer des planifications simples ou complexes permettant d'exécuter des dizaines, des centaines, voire des dizaines de milliers d'emplois. tâches dont les tâches sont définies comme des composants Java standard pouvant exécuter pratiquement tout ce que vous pouvez les programmer. Quartz Scheduler comprend de nombreuses fonctionnalités d'entreprise, telles que la prise en charge des transactions JTA et la mise en cluster.

Vous pouvez trouver des blogs illustrant comment utiliser le quartz dans les bottes de printemps, y compris la définition des haricots de JobDetail, de Trigger, d’usines, etc., ce qui est un peu fastidieux et fastidieux.

Il existe un moyen simple de faire la même chose.

Vous pouvez essayer/ https://github.com/mejariamol/quartz-easy . Cette bibliothèque simplifie l'intégration du planificateur à quartz dans la structure de démarrage de printemps. Je suis arrivé à cela en installant un programmateur quartz dans l’un des projets en cours.

  1. Annotez l'implémentation de votre travail avec une annotation planifiée avec la configuration requise en définissant des champs appropriés présents dans l'annotation.
import com.indusnode.quartz.annotation.Scheduled;
...
@Scheduled(interval="5", intervalType=Scheduled.IntervalType.SEC)
class TestJob implements Job {
    //...
}
  1. Définissez la propriété d'application qe.base-package comme nom de package de base du projet, qui contiendra toutes les implémentations de travail. Ajoutez également com.indusnode en tant que valeur à basePackage dans l'analyse des composants.
  2. Et vous avez terminé! Pas besoin de définir des usines, JobDetail, Triggers ... etc.

Pour utiliser cette bibliothèque, incluez l'artefact quartz-easy dans la section des dépendances de votre pom.xml.

<dependency>
  <groupId>com.indusnode</groupId>
  <artifactId>quartz-easy</artifactId>
  <version>1.0.0</version>
</dependency>

Pour plus de détails, veuillez consulter https://search.maven.org/artifact/com.indusnode/quartz-easy/1.0.0/jar

0
Amol Mejari