Lesson 7: TriggerListeners and JobListeners

      监听器是您创建的对象,用于根据调度程序中发生的事件执行操作。正如您可能猜到的,TriggerListeners接收与触发器相关的事件,JobListeners 接收与Jobs相关的事件。

      与触发器相关的事件包括:触发器触发,触发器触发失败(在本文档的“触发器”部分中讨论)和触发器完成(触发器触发的作业完成)。

      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相关的事件包括: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

      要创建一个监听器,只需创建一个实现org.quartz.TriggerListener和/或org.quartz.JobListener接口的对象。然后在运行时向调度程序注册监听器,并且必须为其指定名称(或者更确切地说,他们必须通过getName()方法通告自己的名称)。

      为方便起见,除了实现这些接口之外,您的类还可以扩展JobListenerSupport或TriggerListenerSupport类,并简单地覆盖您感兴趣的事件。

      监听器与调度程序的ListenerManager一起注册,并附带一个Matcher,用于描述监听器想要接收事件的Jobs/触发器。

      监听器在运行时在调度程序中注册,并且不与Jobs和触发器一起存储在JobStore中。这是因为侦听器通常是与应用程序的集成点。因此,每次运行应用程序时,都需要使用调度程序重新注册侦听器。

添加对特定作业感兴趣的JobListener:

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

添加对特定组的所有作业感兴趣的JobListener:

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

添加对两个特定组的所有作业感兴趣的JobListener:

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

添加对所有作业感兴趣的JobListener:

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

 ...注册TriggerListeners的工作方式相同。

      大多数Quartz用户不使用监听器,但是当应用程序需求创建需要事件通知时,监听器很方便,而Job本身不必显式通知应用程序。

猜你喜欢

转载自blog.csdn.net/qq_30336433/article/details/80965320
今日推荐