[译]Java定时任务调度-Quartz文档(七)TriggerListeners and JobListeners

来源:互联网 发布:mac如何播放flash 编辑:程序博客网 时间:2024/06/05 10:27

监听器顾名思义是当发生某些事件是,发生对应行为的一系列对象。你可能已经猜到了,TriggerListener监听的是trigger相关的事件,JobListener监听的是job相关的事件。trigger相关的事件包括触发器哑火、触发器结束。

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监听事件包括任务开始执行的通知事件和任务执行结束的通知事件。

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

创建自己的监听器

要创建自己的监听器,只需要实现定义的接口即可。在运行时会将监听器注册到scheduler,监听器必须制定一个name(通过实现getName方法)。

为了方便起见,也可以直接继承JobListenerSupport or TriggerListenerSupport,然后重写你的方法即可。
listener的初始化是由ListenerManager完成的。同时还需要一个匹配所监听的job/trigger的匹配器,如下:

为job添加listener

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

引入以下代码:

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")));
  • 为一个group的job添加listener
scheduler.getListenerManager().addJobListener(myJobListener, jobGroupEquals("myJobGroup"));
  • 为两个group的job添加listener:
scheduler.getListenerManager().addJobListener(myJobListener, or(jobGroupEquals("myJobGroup"), jobGroupEquals("yourGroup")));
  • 为所有job添加listener
scheduler.getListenerManager().addJobListener(myJobListener, allJobs());

triggerListener同理。

Quartz使用listener的并不多,但如果有类似的事件通知需求,而job本身没有这个功能,监听器是很有用的。

原文链接:
http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-08.html

0 0
原创粉丝点击