2012-03-27 14 views
25

Hemen tetiklenecek bir işi sandıklamak mümkün mü? İşin artık tetiklenmesini istediğimde şu anki tarih ve saatle bir cron ifade dizesi oluşturdum - bence bu çok karmaşık, işi hemen tetiklemek için başka bir yol var mı?java quartz scheduler hemen yeni bir iş başlatıyor

Teşekkürler Önceden.

cevap

23

Quartz Scheduler'da kayıtlı tüm İşler, bir ad ve gruptan oluşan JobKey tarafından benzersiz şekilde tanımlanmıştır. JobKey verilen işe, Scheduler örneğinizin triggerJob(JobKey jobKey) numarasını arayarak hemen kovabilirsiniz.

//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); 

Not:

  • scheduler uygulamanızda boyunca kullanılan Zamanlayıcı örneğidir. Oluşturulduktan sonra start() yöntemi çağrılmalıdır.

  • iş .Bu sadece triggerJob(JobKey jobKey) arayarak programlı ateş olabilir buna tetikleri ya cron'u ekleyemezsiniz dayanıklı bir iştir.

+0

Neden "SimpleTrigger" kullanılmıyor ve "scheduler.scheduleJob()" ifadesi kullanılmalı? – basZero

+1

FYI JobKey, 1.5.2 API'nin bir parçası değildir. –

+0

İşin dayanıklı (.storeDurably()) ayarlanması gerekir, ancak daha sonra el ile (muhtemelen scheduler.deleteJob() kullanarak) temizlemek zorundayız ya da iş DB'de kalıcı olarak kalacaktır. İnsanların bu problemle nasıl başa çıktıklarını merak ediyorum. – leeyuiwah

46

Evet, hemen yerine Cron İfadelerin üzerine bekleyen işinizi ateş etmeye aşağıdaki Trigger kullanın.

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

Bellek sızıntısı ayarı oluşturmadan çok daha iyi dayanıklı = true;) – BrunoJCM

0

"JobKey" öğesini 2 anahtar dizesi değeriyle anında oluşturabilirsiniz.

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

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

Lütfen en az bir kısa açıklama ekleyin. –