# 触发器监听器和作业监听器
监听器是您创建的对象,用于根据调度程序中发生的事件执行操作。正如您可能猜到的,触发器监听器接收与触发器相关的事件,作业监听器接收作业相关的事件。
触发器相关事件包括:触发器触发、触发器无触发(在本文档的“触发器”部分讨论)和触发器完成(触发器触发的作业完成)。
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);
}
作业相关事件包括:作业即将执行的通知,以及作业完成执行时的通知。
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.TriggerListener
和(或)org.quartz.JobListener
接口的对象。然后,监听器在运行时向调度程序注册,并且必须指定名称(或者,必须通过getName()方法公布自己的名称)。
为了方便起见,除了实现这些接口之外,您的类还可以扩展JobListenerSupport
或TriggerListenerSupport
类,并简单地覆盖您感兴趣的事件。
监听器与一个匹配器一起注册到调度器的监听器管理中心中,该匹配器描述了监听器希望接收事件的哪些作业或触发器。
监听器在运行时向调度程序注册,不会与作业和触发器一起存储在
JobStore
中。这是因为监听器通常是应用程序的集成点。因此,每次运行应用程序时,都需要向调度程序重新注册监听器。
添加对特定作业有效的作业监听器:
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")));
添加对特定组的所有作业有效的作业监听器:
scheduler.getListenerManager().addJobListener(myJobListener, jobGroupEquals("myJobGroup"));
添加对两个特定组的所有作业有效的作业监听器:
scheduler.getListenerManager().addJobListener(myJobListener, or(jobGroupEquals("myJobGroup"), jobGroupEquals("yourGroup")));
添加对所有作业有效的作业监听器:
scheduler.getListenerManager().addJobListener(myJobListener, allJobs());
注册触发器监听器的方式与此(作业监听器)相同。
大多数Quartz用户不使用监听器,但当应用程序需要通知事件时,监听器很方便,而作业本身不必明确通知应用程序。

微信公众号

QQ交流群
如若发现错误,诚心感谢反馈。
愿你倾心相念,愿你学有所成。
愿你朝华相顾,愿你前程似锦。