Listeners是您创建的对象,用于根据调度程序中发生的事件执行操作。
1. JobListenser
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);}
(1)创建一个JobListenser接口
要创建一个listener,只需创建一个实现org.quartz.JobLitenser接口的对象。然后,listener在运行时会向调度程序注册,并且必须给出一个名称(或者,他们必须通过他们的getName()方法来获得自己的名字)。
import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.JobListener;public class MyJobListener implements JobListener {private String name;public MyJobListener(String name) {this.name = name;}public String getName() {return name;}public void jobToBeExecuted(JobExecutionContext context) {// do something with the event}public void jobWasExecuted(JobExecutionContext context,JobExecutionException jobException) {// do something with the event}public void jobExecutionVetoed(JobExecutionContext context) {// do something with the event}}
为了方便起见,实现这些接口,类也可以扩展JobListenerSuppor类,并且只需覆盖感兴趣的事件。
import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.listeners.JobListenerSupport;public class MyOtherJobListener extends JobListenerSupport {private String name;public MyOtherJobListener(String name) {this.name = name;}public String getName() {return name;}@Overridepublic void jobWasExecuted(JobExecutionContext context,JobExecutionException jobException) {// do something with the event}}
(2)使用JobListenser
listener与调度程序的ListenerManager一起注册,并配有描述listener希望接收事件的job的Matcher。 :::info Listener在运行时间内与调度程序一起注册,并且不与jobs和触发器一起存储在JobStore中。这是因为Listenser通常是与应用程序的集成点。因此,每次运行应用程序时,都需要重新注册该调度程序。 ::: 需要为匹配器和关键类使用静态导入,这将使定义匹配器更简洁:
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, allJobs());
向调度程序注册一个作业监听器,以侦听特定的作业
scheduler.getListenerManager().addJobListener(myJobListener, jobKeyEquals(jobKey("myJobName", "myJobGroup")));
向调度程序注册一个作业监听器,以侦听两个特定的作业
scheduler.getListenerManager().addJobListener(myJobListener, or(jobGroupEquals("myJobGroup"), jobGroupEquals("yourGroup")));
向调度程序注册一个作业监听器,以侦听一个特定组的所有作业
scheduler.getListenerManager().addJobListener(myJobListener, jobGroupEquals("myJobGroup"));
2. TriggerListenser
(1)创建一个TriggerListenser接口
要创建一个listener,只需创建一个实现org.quartz.TriggerListener接口的对象。然后,listener在运行时会向调度程序注册,并且必须给出一个名称(或者,他们必须通过他们的getName()方法来获得自己的名字)。
import org.quartz.JobExecutionContext;import org.quartz.Trigger;import org.quartz.TriggerListener;import org.quartz.Trigger.CompletedExecutionInstruction;public class MyTriggerListener implements TriggerListener {private String name;public MyTriggerListener(String name) {this.name = name;}public String getName() {return name;}public void triggerComplete(Trigger trigger, JobExecutionContext context,CompletedExecutionInstruction triggerInstructionCode) {// do something with the event}public void triggerFired(Trigger trigger, JobExecutionContext context) {// do something with the event}public void triggerMisfired(Trigger trigger) {// do something with the event}public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {// do something with the eventreturn false;}}
为了方便起见,实现这些接口,类也可以扩展TriggerListenerSupport类,并且只需覆盖感兴趣的事件。
import org.quartz.JobExecutionContext;import org.quartz.Trigger;import org.quartz.listeners.TriggerListenerSupport;public class MyOtherTriggerListener extends TriggerListenerSupport {private String name;public MyOtherTriggerListener(String name) {this.name = name;}public String getName() {return name;}@Overridepublic void triggerFired(Trigger trigger, JobExecutionContext context) {// do something with the event}}
(2)使用TriggerListenser
listener与调度程序的TriggerManager一起注册,并配有描述listener希望接收事件的触发器的Matcher。
需要为匹配器和关键类使用静态导入,这将使定义匹配器更简洁:
import static org.quartz.TriggerKey.*;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.*;
向调度程序注册一个trigger监听器,以侦听所有trigger
scheduler.getListenerManager().addTriggerListener(myTriggerListener, allTriggers());
向调度程序注册一个trigger监听器,以侦听特定的trigger
scheduler.getListenerManager().addTriggerListener(myTriggerListener, triggerKeyEquals(triggerKey("myTriggerName", "myTriggerGroup")));
向调度程序注册一个trigger监听器,以侦听一个特定组的所有trigger
scheduler.getListenerManager().addTriggerListener(myTriggerListener, triggerGroupEquals("myTriggerGroup"));
3. SchedulerListenser
SchedulerListeners非常类似于TriggerListeners和JobListeners,除了它们在Scheduler本身中接收到事件的通知 - 不一定与特定触发器(trigger)或job相关的事件。
与计划程序相关的事件包括:添加job/触发器,删除job/触发器,调度程序中的严重错误,关闭调度程序的通知等。
org.quartz.SchedulerListener接口:
public interface SchedulerListener {public void jobScheduled(Trigger trigger);public void jobUnscheduled(String triggerName, String triggerGroup);public void triggerFinalized(Trigger trigger);public void triggersPaused(String triggerName, String triggerGroup);public void triggersResumed(String triggerName, String triggerGroup);public void jobsPaused(String jobName, String jobGroup);public void jobsResumed(String jobName, String jobGroup);public void schedulerError(String msg, SchedulerException cause);public void schedulerStarted();public void schedulerInStandbyMode();public void schedulerShutdown();public void schedulingDataCleared();}
(1)创建SchedulerListenser
继承SchedulerListenerSupport并重写它的方法:
import org.quartz.Trigger;import org.quartz.listeners.SchedulerListenerSupport;public class MyOtherSchedulerListener extends SchedulerListenerSupport {@Overridepublic void schedulerStarted() {// do something with the event}@Overridepublic void schedulerShutdown() {// do something with the event}@Overridepublic void jobScheduled(Trigger trigger) {// do something with the event}}
(2)使用SchedulerListener
SchedulerListeners注册到调度程序的ListenerManager。SchedulerListeners几乎可以实现任何实现org.quartz.SchedulerListener接口的对象。
添加SchedulerListener:
scheduler.getListenerManager().addSchedulerListener(mySchedListener);
删除SchedulerListener:
scheduler.getListenerManager().removeSchedulerListener(mySchedListener);
