web-dev-qa-db-fra.com

Planificateur de quartz dans un environnement de cluster

J'utilise

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
scheduler.start();
Trigger asapTrigger = getAsapTrigger();
JobDetail asapJob = getAsapJobDetails();
scheduler.scheduleJob(asapJob, asapTrigger);

Cela fonctionne, mais lorsque je choisis un environnement de cluster, 2 threads s'exécutent pour le même travail.

J'utilise des annotations et non un fichier de propriétés. Je veux exécuter un seul thread. Quelqu'un peut-il m'aider à ce sujet. Comment configurer?

mon code ressemble presque à: http://k2Java.blogspot.com/2011/04/quartz.html

28
venkat

Vous devez configurer Quartz pour qu'il s'exécute dans un environnement en cluster. Le clustering ne fonctionne actuellement qu'avec le magasin de travaux JDBC et fonctionne en ayant chaque nœud du cluster pour partager la même base de données.

  • Définissez la propriété org.quartz.jobStore.isClustered sur true si vous disposez de plusieurs instances de Quartz qui utilisent le même ensemble de tables de base de données. Cette propriété est utilisée pour activer les fonctionnalités de clustering.
  • Définissez la propriété org.quartz.jobStore.clusterCheckinInterval (millisecondes) qui est la fréquence à laquelle cette instance se connecte avec les autres instances du cluster.
  • Définissez le org.quartz.scheduler.instanceId sur [~ # ~] auto [~ # ~] afin que chaque nœud du cluster ait un unique instanceId.

Veuillez noter que chaque instance du cluster doit utiliser la même copie du fichier quartz.properties. De plus, si vous utilisez le clustering sur des machines distinctes, assurez-vous que leurs horloges sont synchronisées.

Pour plus d'informations, consultez la documentation officielle qui contient un exemple de fichier de propriétés pour un planificateur en cluster.

40