Quartz 框架 教程(中文版)2.2.x 之第七课 触发监听器和作业任务监听器

原文地址:http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-07

 

第七课:触发监听器和作业任务监听器

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

        跟触发器有关的事件包括:触发器被触发,触发器触发失败(在触发器课程中讨论过),以及触发器触发完成(触发器完成后作业任务开始运行)。

       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执行完成的通知事件。

       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类,可以只重写你感兴趣的事件方法。

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

       监听器在运行期间注册到调度中,但是不会把作业任务和触发器存储到JobStore中。那是因为监听器在你的应用中通常是一些点的集合。因此,每次应用运行时,监听器都需要重新在调度器中注册。

       在一个指定的作业任务中添加Job监听器:

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


       你可以静态导入matcher类和其他关键类,让你定义matchers时更简洁:

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.*;


        上面的例子将变成这样:

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


        在你感兴趣的一个作业组中所有的作业任务添加上Job监听器:

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

       

        在你感兴趣的两个作业组中所有的作业任务添加上Job监听器:

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


        在所有作业中添加Job监听器:

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

 

        注册Trigger监听器也用同样的方法。

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

你可能感兴趣的:(框架,quartz,教程)