2017-04-04 74 views

回答

1

Quartz的工作是通過調用其execute(JobExecutionContext)方法運行。此JobExecutionContext對象有一個getScheduler()方法來訪問正在運行作業的Scheduler

所以,你可能只是這樣做:

class YourJob implements Job { 
    //... 
    @Override 
    public void execute(final JobExecutionContext context) throws JobExecutionException { 
     //... 
     if (someCondition) { 
      try { 
       context.getScheduler().shutdown(); 
      } catch (SchedulerException e) { 
       // log or rethrow! 
      } 
     } 
     //... 

不過,我真的不知道,如果關閉調度向下運行作業的中間是一個好主意。你爲什麼想這樣做?如果你正在試圖做的一切都是爲了阻止再次運行一些工作,這可能是更好的只是unschedule它:

Unscheduling工作的特定觸發:

// Unschedule a particular trigger from the job (a job may have more than one trigger) 
scheduler.unscheduleJob(triggerKey("trigger1", "group1")); 

刪除作業和所有觸發器

scheduler.deleteJob(jobKey("job1", "group1")); 
+0

這裏Unscheduling的情景 - 每天早晨,一組文件被髮送到一個文件夾。我的代碼在這個文件夾中搜索3A和7A之間的文件。如果找到這些文件,我將它們移動並處理它們。每次作業運行後,都沒有找到文件(文件被移動),所以沒有其他處理。第二天早上,整個過程重新開始。問題是當天沒有文件移動到那個文件夾。如果在上午7點,沒有處理完成,我需要關閉調度程序,以便它不會嘗試處理下一天的文件。他們需要順序完成。 – DropOfGoldenSun

+0

@DropOfGoldenSun Oohhhh 3 AM-7AM帥哥!對不起,我不認識你。我會編輯我的答案以解決你剛纔所說的問題。 – walen

+0

這就是我。我仍然試圖把這一切都弄清楚。謝謝你的幫助。 – DropOfGoldenSun