Lesson 7: TriggerListeners and JobListeners

本文详细介绍了Quartz调度器中的监听器概念,包括TriggerListeners和JobListeners的作用与使用方法。解释了如何创建并注册监听器,以及如何使用匹配器来指定监听器关注的触发器或任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      监听器是您创建的对象,用于根据调度程序中发生的事件执行操作。正如您可能猜到的,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本身不必显式通知应用程序。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值