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用户都不会使用,但是当应用程序需要创建基于时间的通知是这个是十分方便的,这样就不需要任务本身显示的通知应用程序。

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