(翻譯)Quartz官方教程——第七課:TriggerListeners 和 JobListeners

監聽器是用來根據調度器發生的事件作出響應的對象。正如你想的那樣,TriggerListeners接收觸發器相關的事件,JobListeners接收任務相關的事件。java

觸發器相關的事件包括:任務觸發,任務錯過觸發(在教程的觸發器章節討論過)以及觸發完畢(及由觸發器觸發的任務執行完畢)。spa

TriggerListener接口代碼

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

JobListener接口代碼

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中。這是由於監聽器一般與你的應用集成在一塊兒。由於,每次運行應用程序時,都須要使用調度器從新註冊監聽程序。事件

 添加對特定做業感興趣的JobListener:

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

添加對特定組的全部做業感興趣的JobListener:

scheduler.getListenerManager().addJobListener(myJobListener, jobGroupEquals("myJobGroup"));

添加對兩個特定組的全部做業感興趣的JobListener:

scheduler.getListenerManager().addJobListener(myJobListener, or(jobGroupEquals("myJobGroup"), jobGroupEquals("yourGroup")));

添加對全部做業感興趣的JobListener:

scheduler.getListenerManager().addJobListener(myJobListener, allJobs());

...註冊TriggerListeners的工做方式相同。class

大多數Quartz用戶一般不須要使用監聽器,但當應用程序須要接收事件通知的時候使用監聽器會很方便,由於Job自己沒必要顯式地通知應用程序。

相關文章
相關標籤/搜索