2010-04-26 5 views
4

Y a-t-il un moyen d'exécuter une tâche une seule fois en utilisant Quartz (Java). Je comprends que cela n'a pas de sens d'utiliser Quartz dans ce cas mais la chose est que j'ai plusieurs emplois et ils sont exécutés plusieurs fois, donc j'utilise Quartz.Exécution d'une tâche une seule fois à l'aide de Quartz

Est-ce encore possible?

Répondre

10

Vous devez utiliser SimpleTrigger qui se déclenche à un moment précis et sans répétition. TriggerUtils a beaucoup de méthodes pratiques pour créer ce genre de choses.

+2

toutes les méthodes pratiques ont disparu dans la version 2.0. Une idée d'où ils sont maintenant? –

+0

@JensSchauder ressemble à tout cela déplacé dans les différents enfants de ScheduleBuilder par exemple CronScheduleBuilder. La façon de régler les choses est un peu confuse. Comme vous devez utiliser TiggerBuilder pour créer un trigger, et lui passer un planning avec la méthode withSchedule, où le planning est lui-même un trigger. – ams

2

En quartz> 2.0, vous pouvez obtenir le planificateur déprogrammer tout travail après le travail est fait:

@Override 
protected void execute(JobExecutionContext context) 
      throws JobExecutionException { 
    ... 
    // process execution 
    ... 
    context.getScheduler().unscheduleJob(triggerKey); 
    ... 
} 

où triggerKey est l'ID de la tâche pour exécuter une seule fois. Après cela, le travail ne serait plus appelé.

2

Je ne suis pas sûr à quel point est similaire à quartz dans Mono et Java, mais cela semble fonctionner en .Net

TriggerBuilder.Create() 
     .StartNow() 
     .Build(); 
2

Voici un exemple de la façon d'exécuter une classe TestJob immédiatement avec Quartz 2.x:

public JobKey runJob(String jobName) 
{ 
    // if you don't call startAt() then the current time (immediately) is assumed. 
    Trigger runOnceTrigger = TriggerBuilder.newTrigger().build(); 
    JobKey jobKey = new JobKey(jobName); 
    JobDetail job = JobBuilder.newJob(TestJob.class).withIdentity(jobKey).build(); 
    scheduler.scheduleJob(job, runOnceTrigger); 
    return jobKey; 
} 

voir aussi Quartz Enterprise Job Scheduler TutorialsSimpleTriggers

4

Oui, c'est possible!

JobKey jobKey = new JobKey("testJob"); 
JobDetail job = newJob(TestJob.class) 
      .withIdentity(jobKey) 
      .storeDurably() 
      .build(); 
scheduler.addJob(job, true); 
scheduler.triggerJob(jobKey); //trigger a job inmediately 
Questions connexes