Quartz教程 第7课 TriggerListener和JobListener

来源:互联网 发布:数据分析师教材 编辑:程序博客网 时间:2024/06/02 03:42

7课 TriggerListenerJobListener

监听器是在调度器中基于事件机制执行操作的对象。你大概可以猜到,TriggerListener接收触发器有关的事件,JobListener接收作业任务有关的事件。

Trigger有关的事件包括:trigger触发、trigger触发失败(Trigger部分谈论过了)trigger触发完成(trigger触发的job完成了)

org.quartz.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);

}

Job有关的事件包括:通知job将要被执行,通知job已经执行完成。

org.quartz.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.TriggerListenerorg.quartz.JobListener接口的对象即可。监听器会在运行注册到调度器中,并且必须要给定监听器名(或者更确切地说,监听器会调用getName方法获取自己的名字)。

为了方便使用,监听器除了可以实现这些接口,你还可以继承JobListenerSupportTriggerListenerSupport类,可以只重写你感兴趣的事件方法。

监听器注册到调度器中的监听器管理类时还携带着一个匹配器,这个匹配器描述了作业任务和触发器的监听器想接收的事件。

在运行时,监听器会被注册到schedule中,但是不会jobtrigger那样存储到JobStore中。那是因为监听器在你的应用中通常是一些点的集合。因此,每次应用运行时,监听器都需要重新在调度器中注册。

1、给特定的job添加监听器:

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

2、给特定组的所有job添加JobListener

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

3、给两个特定组的所有job添加JobListener

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

4、给所有job添加监听器:

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

注册TriggerListener也是同样的方法。

大部分的Quartz用户都不会用到监听器,但是当应用要求创建需要的事件通知时,而没有Job实例去通知应用时,使用监听器非常方便。

阅读全文
0 0
原创粉丝点击