2010-10-31 6 views
6

J'utilise un Quartz pour créer un ThreadPool en cluster et j'ai un certain nombre de tâches qui s'exécutent à différents moments. Quelle est la meilleure façon d'exécuter une tâche de manière immanente et seulement une fois sur le ThreadPool en cluster. Je sais que je peux définir la tâche en priorité. Mais quelle est la meilleure façon d'enregistrer une tâche "one shot"?Tâche immédiate unique avec Quartz

Répondre

4

Je sens que je dois manquer quelque chose, ou peut-être vous donné sur ce bit dans la documentation:

public SimpleTrigger(String name, String group, Date startTime, Date endTime, int repeatCount, long repeatInterval)


SimpleTrigger trigger = new SimpleTrigger("myTrigger", 
              null, 
              new Date(), 
              null, 
              0, 
              0L); 
+2

repeatInterval ne peut pas être zéro ou le SimpleTrigger lancera une org.quartz.SchedulerException lors de la validation. – Aidamina

+2

Cela ne fonctionne pas pour le quartz 2.2.1. Je reçois une erreur disant ne peut pas instancier SimpleTrigger – AD14

+0

Fonctionne avec le quartz ~ 1.6 mais pas avec ~ 2.1 –

11

Vous pouvez également utiliser la classe TriggerBuilder pour rendre la vie un un peu plus facile. C'est similaire à ce qui a été posté auparavant, juste un peu plus propre.

Trigger trigger = TriggerBuilder.newTrigger() 
    .startNow() 
    .build(); 
+0

Cela fonctionne pour le quartz 2.2.1 de lancer une seule fois le travail. – AD14

+0

Je n'arrive pas à trouver un moyen d'ajouter des instructions ratées à ce déclencheur? – pkrish

2

La meilleure façon de déclencher une one-shot pour un emploi pré-enregistré:

Scheduler sched = ... 
scheduler.triggerJob(jobKey);