第七課:觸發監聽器和做業任務監聽器spa
監聽器是在調度器中基於事件機制執行操做的對象。你大概能夠猜到,觸發監聽器接收響應跟觸發器有關的事件,做業任務監聽器接收響應跟做業任務有關的事件。
跟觸發器有關的事件包括:觸發器被觸發,觸發器觸發失敗(在觸發器課程中討論過),以及觸發器觸發完成(觸發器完成後做業任務開始運行)。code
1 public interface ITriggerListener 2 { 3 string Name { get; } 4 5 void TriggerFired(ITrigger trigger, IJobExecutionContext context); 6 7 bool VetoJobExecution(ITrigger trigger, IJobExecutionContext context); 8 9 void TriggerMisfired(ITrigger trigger); 10 11 void TriggerComplete(ITrigger trigger, IJobExecutionContext context, int triggerInstructionCode); 12 }
跟做業任務相關的事件包括:job即將被執行的通知和job執行完成的通知事件。對象
The IJobListener Interfaceblog
1 public interface IJobListener 2 { 3 string Name { get; } 4 5 void JobToBeExecuted(IJobExecutionContext context); 6 7 void JobExecutionVetoed(IJobExecutionContext context); 8 9 void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException); 10 }
使用本身開發的監聽器繼承
要建立一個監聽器,能夠簡單地建立一個實現org.quartz.TriggerListener或org.quartz.JobListener接口的對象便可。監聽器會在運行期間註冊到調度器中,而且必需要給定監聽器名(或者更確切地說,監聽器會調用getName方法獲取本身的名字)。
爲了方便使用,監聽器除了實現這些接口,你還能夠繼承ITriggerListener 和IJobListener 類,能夠只重寫你感興趣的事件方法。
監聽器註冊到調度器中的監聽器管理類時還攜帶着一個匹配器,這個匹配器描述了做業任務和觸發器的監聽器想接收的事件。
監聽器在運行期間註冊到調度中,可是不會把做業任務和觸發器存儲到JobStore中。那是由於監聽器在你的應用中一般是一些點的集合。所以,每次應用運行時,監聽器都須要從新在調度器中註冊。接口
在一個指定的做業任務中添加Job監聽器:事件
scheduler.ListenerManager.AddJobListener(myJobListener, KeyMatcher<JobKey>.KeyEquals(new JobKey("myJobName", "myJobGroup")));
在你感興趣的一個做業組中全部的做業任務添加上Job監聽器:開發
scheduler.ListenerManager.AddJobListener(myJobListener, GroupMatcher<JobKey>.GroupEquals("myJobGroup"));
在你感興趣的兩個做業組中全部的做業任務添加上Job監聽器:
scheduler.ListenerManager.AddJobListener(myJobListener,
get
OrMatcher<JobKey>.Or(GroupMatcher<JobKey>.GroupEquals("myJobGroup"), GroupMatcher<JobKey>.GroupEquals("yourGroup")));
在全部做業中添加Job監聽器:string
1 scheduler.ListenerManager.AddJobListener(myJobListener, GroupMatcher<JobKey>.AnyGroup());
註冊Trigger監聽器也用一樣的方法。 大部分的Quartz用戶都不會用到監聽器,可是當應用要求建立須要的事件通知時,而沒有Job實例去通知應用時,使用監聽器很是方便。