Quartz2.2.x官方文檔2.2.X—第三章 7.TriggerListeners和JobListeners

Table of Contents | ‹ Lesson 6 | Lesson 8 ›

課程 7: TriggerListeners 和 JobListeners

監聽器是你創建的對象,基於調度程序的時間來執行相應的行爲。你可能猜到了, TriggerListeners 接收與觸發器相關的事件,JobListeners 接收與任務相關的事件。

Trigger-related事件包含: 事件觸發, 事件不觸發 (在"Triggers"的文檔部分討論), 和觸發器完成(觸發的工作完成了).

The org.quartz.TriggerListener Interface


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

Job-related事件包含: 關於job即將執行的通知, 關於job執行完成的通知。

The org.quartz.JobListener Interface


public interface JobListener {

    public String getName();

    public void jobToBeExecuted(JobExecutionContext context);

    public void jobExecutionVetoed(JobExecutionContext context);

    public void jobWasExecuted(JobExecutionContext context,
            JobExecutionException jobException);

}

Using Your Own Listeners

To create a listener, simply create an object that implements the org.quartz.TriggerListener and/or org.quartz.JobListener interface. Listeners are then registered with the scheduler during run time, and must be given a name (or rather, they must advertise their own name via their getName() method).

For your convenience, tather than implementing those interfaces, your class could also extend the class JobListenerSupport or TriggerListenerSupport and simply override the events you’re interested in.

Listeners are registered with the scheduler’s ListenerManager along with a Matcher that describes which Jobs/Triggers the listener wants to receive events for.

Listeners are registered with the scheduler during run time, and are NOT stored in the JobStore along with the jobs and triggers. This is because listeners are typically an integration point with your application. Hence, each time your application runs, the listeners need to be re-registered with the scheduler.

添加一個對某項job監聽的JobListener:

scheduler.getListenerManager().addJobListener(myJobListener, KeyMatcher.jobKeyEquals(new JobKey("myJobName", "myJobGroup")));

你可能想用靜態導入matcher和key類,這將使你的定義更加簡潔:


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.

上面的例子變成:


scheduler.getListenerManager().addJobListener(myJobListener, jobKeyEquals(jobKey("myJobName", "myJobGroup")));

添加JobListener監聽某個組的全部job:


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

添加JobListener監聽某兩個組的全部job:


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

添加JobListener監聽全部的job:


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

…註冊TriggerListeners工作是同樣的方法。

監聽器大多數Quartz用戶都不會使用,但是當應用程序需要創建基於時間的通知是這個是十分方便的,這樣就不需要任務本身顯示的通知應用程序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章