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

监听器顾名思义是当发生某些事件是,发生对应行为的一系列对象。你可能已经猜到了,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值