監聽器是用來根據調度器發生的事件作出響應的對象。正如你想的那樣,TriggerListeners接收觸發器相關的事件,JobListeners接收任務相關的事件。java
觸發器相關的事件包括:任務觸發,任務錯過觸發(在教程的觸發器章節討論過)以及觸發完畢(及由觸發器觸發的任務執行完畢)。spa
public interface TriggerListener { public String getName(); public void triggerFired(Trigger trigger, JobExecutionContext context); public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context); public void triggerMisfired(Trigger trigger); public void triggerComplete(Trigger trigger, JobExecutionContext context, int triggerInstructionCode); }
任務相關的事件包括:任務將要被執行的通知和任務執行完畢的通知code
public interface JobListener { public String getName(); public void jobToBeExecuted(JobExecutionContext context); public void jobExecutionVetoed(JobExecutionContext context); public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException); }
要想建立一個監聽器,只須要簡單的實現org.quartz.TriggerListener 和/或者org.quartz.JobListener接口。它們將會在運行時被註冊到調度器而且被分配一個名字(或者它們必須能經過getName()方法獲取到名字)。對象
爲了方便,除了實現這些接口以外,您還能夠擴展JobListenerSupport或TriggerListenerSupport類,並簡單地覆蓋你感興趣的事件。教程
監聽器向ListenerManager註冊了一個匹配器,該匹配器描述了監聽器想要從哪一個任務/觸發器接收事件。接口
監聽器在運行時在調度器中註冊,而且不會與任務和觸發器一塊兒存儲在JobStore中。這是由於監聽器一般與你的應用集成在一塊兒。由於,每次運行應用程序時,都須要使用調度器從新註冊監聽程序。事件
scheduler.getListenerManager().addJobListener(myJobListener, KeyMatcher.jobKeyEquals(new JobKey("myJobName", "myJobGroup")));
你可能但願將匹配器和關鍵類靜態導入,這將使你更清晰地定義匹配器:get
import static org.quartz.JobKey.*; import static org.quartz.impl.matchers.KeyMatcher.*; import static org.quartz.impl.matchers.GroupMatcher.*; import static org.quartz.impl.matchers.AndMatcher.*; import static org.quartz.impl.matchers.OrMatcher.*; import static org.quartz.impl.matchers.EverythingMatcher.*; ...etc.
而後上邊的例子將變成這樣:io
scheduler.getListenerManager().addJobListener(myJobListener, jobKeyEquals(jobKey("myJobName", "myJobGroup")));
scheduler.getListenerManager().addJobListener(myJobListener, jobGroupEquals("myJobGroup"));
scheduler.getListenerManager().addJobListener(myJobListener, or(jobGroupEquals("myJobGroup"), jobGroupEquals("yourGroup")));
scheduler.getListenerManager().addJobListener(myJobListener, allJobs());
...註冊TriggerListeners的工做方式相同。class
大多數Quartz用戶一般不須要使用監聽器,但當應用程序須要接收事件通知的時候使用監聽器會很方便,由於Job自己沒必要顯式地通知應用程序。