2012-03-27 6 views

Odpowiedz

23

Wszystkie zadania zarejestrowane w kwarcu Scheduler są jednoznacznie identyfikowane przez JobKey, które składa się z nazwy i grupy. Możesz natychmiast zwolnić zadanie, które ma podaną JobKey, dzwoniąc pod numer triggerJob(JobKey jobKey) swojej instancji .

//Create a new Job 
JobKey jobKey = JobKey.jobKey("myNewJob", "myJobGroup"); 
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity(jobKey).storeDurably().build(); 

//Register this job to the scheduler 
scheduler.addJob(job, true); 

//Immediately fire the Job MyJob.class 
scheduler.triggerJob(jobKey); 

Uwaga:

  • scheduler jest instancja Harmonogram stosowany w całej aplikacji. Jego metoda start() powinna być już wywołana po jej utworzeniu.

  • Zadanie jest trwałą pracą, do której nie można dołączyć żadnych wyzwalaczy ani crona. Program można uruchamiać tylko programując pod numerem triggerJob(JobKey jobKey).

+0

Dlaczego nie używać 'SimpleTrigger' i nie używać' scheduler.scheduleJob() ', które spowoduje natychmiastowe wykonanie? – basZero

+1

FYI JobKey nie jest częścią interfejsu API 1.5.2. –

+0

Zadanie musi być ustawione na trwałe (.storeDurably()), ale potem musimy je ręcznie wyczyścić (prawdopodobnie przy użyciu programu scheduler.deleteJob()) lub zadanie pozostanie trwale w DB. Zastanawiam się, jak ludzie radzą sobie z tym problemem? – leeyuiwah

46

Tak, użyj następującego Trigger, aby natychmiast zwolnić pracę, zamiast czekać na wyrazy Cron.

String jobName = ""; // Your Job Name 
    String groupName = ""; // Your Job Group 
    Trigger trigger = TriggerBuilder.newTrigger() 
       .withIdentity(jobName, groupName) 
       .startNow() 
       .build(); 
+6

Znacznie lepiej niż tworzenie ustawień przecieku pamięci durable = true;) – BrunoJCM

0

Możesz utworzyć "JobKey" w locie z 2 wartościami łańcucha kluczy.

IScheduler sched = /* however you get your scheduler*/; 

sched.TriggerJob(new JobKey("myname", "mygroup")); 
+0

Dodaj co najmniej krótki opis. –

Powiązane problemy