2015-01-07 153 views
1

石英調度程序中的pauseJob()和pauseTrigger()有什麼區別? 如何選擇其中之一供使用?現在我想暫停/ interept特定的工作,我該怎麼辦石英調度程序中的pauseJob和pauseTrigger之間的區別?

我的調度代碼給出波紋管

JobDetail job = new JobDetail(); 
      job.setName("pollerjob"+pollerId); 
      job.setJobClass(Pollersheduller.class); 
      job.getJobDataMap().put("socialMediaObj", socialMediaObj); 
      job.getJobDataMap().put("queue", queue); 


      //configure the scheduler time 
      SimpleTrigger trigger = new SimpleTrigger(); 
      trigger.setName("pollerSocial"+pollerId); 
      trigger.setStartTime(new Date(System.currentTimeMillis() + 1000)); 
      trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY); 
      trigger.setRepeatInterval(Long.parseLong(intervel)); 


      //schedule it 
      Scheduler scheduler = null; 
      try { 
       scheduler = new StdSchedulerFactory().getScheduler(); 
       scheduler.start(); 
       scheduler.scheduleJob(job, trigger); 
      } catch (SchedulerException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

回答

6

正如你可能已經注意到,在石英一個任務可以與多個觸發器相關聯。如果您查看Quartz源代碼,您將看到pauseJob方法只是檢索與指定作業關聯的所有觸發器並暫停它們,而pauseTrigger方法僅暫停特定觸發器。所以這是主要的區別。

請注意,暫停Quartz中的作業不會暫停正在運行的正在運行的作業,它僅僅會阻止作業在未來運行!

如果要中斷正在運行的作業,則可以使用作業必須實現的org.quartz.Interruptable界面中定義的interruptJob方法。如果你的工作實現了這個接口,那麼完全由你來實現中斷邏輯。例如,可以在調用interruptJob方法時設置某種標誌,然後您需要在作業的execute方法中檢查該標誌的值。