Je lis les Spring 3.0 doc s concernant la planification. Je penche vers JobDetailBean de Spring pour Quartz. Cependant, l'annotation @ Scheduled a capté mon attention. Il semble que ce soit une autre façon de planifier la tâche à l'aide de Spring Framework. Sur la base des documents, Spring propose trois méthodes de planification:
Je n'ai aucun intérêt pour la minuterie JDK. Pourquoi devrais-je choisir @Scheduled plutôt que Quartz? (Quand je parle de Quartz, je veux dire utiliser le wrapper de haricots de Spring pour Quartz).
Disons que mon cas d'utilisation est suffisamment complexe pour que je communique avec un service Web tiers pour importer et exporter des données à des intervalles spécifiés.
Le quartz est un ordre de grandeur plus complexe que le planificateur intégré de Spring, y compris la prise en charge des travaux persistants, transactionnels et distribués. C'est un peu un cochon, cependant, même avec le support de l'API de Spring.
Si tout ce dont vous avez besoin est d'exécuter des méthodes sur un bean toutes les X secondes, ou sur une planification cron, alors @Scheduled
(ou les différentes options de Spring's <task>
schéma de configuration ) est probablement suffisant
Je dois faire part de ma propre expérience concernant l'utilisation de @Scheduled
versus Quartz
comme implémentation de planification dans une application Spring.
La planification des travaux avait les exigences suivantes:
Par conséquent, nous devons essayer d'utiliser l'implémentation Quartz (version 2.2.3) afin de prendre en charge la persistance des travaux dans une base de données. Quelques conclusions de base sont les suivantes:
JobListener
et TriggerListener
personnalisés.Selon Documentation Quartz
Nous pouvons utiliser une fonctionnalité plus complexe qui n'existe pas dans @Scheduler. par exemple:
scheduler.standby();
et le planifier à nouveau avec scheduler.start();
.scheduler.shutdown(true);
et scheduler.shutdown(false);
JobDetail job1 =newJob(MyJobClass.class). withIdentity("job1","group1"). storeDurably(). build();
JobDetail job1 = newJob(MyJobClass.class). withIdentity("job1", "group1"). build();
Au printemps, vous pouvez planifier des tâches en utilisant FixedRate, FixedDelay et cron. Mais la plupart des travaux planifiés nécessitent une gestion dynamique du temps d'exécution. Donc, dans ce scénario, il est préférable d'utiliser Quartz car il offre la possibilité de stocker des travaux planifiés dans DBJobstore ainsi que RAMJobstore.