QUARTZ系列之二-监听器

Listener

1.是什么: perform actions based on events occurring within the scheduler.spa

2.分类:a.TriggerListeners ; b.JobListeners ; c.SchedulerListeners 代理

TriggerListener

1. 处理与trigger相关的事件,包括: trigger firings, trigger mis-firings , and trigger completions (the jobs fired off by the trigger is finished).code

2. 接口定义:orm

public interface TriggerListener {    // 获取监听器的名称 public String getName();    // 1.Called by the Scheduler when a Trigger has fired,
   // 2.before it's associated org.quartz.JobDetail is executed.
   // 3.called before the vetoJobExecution(..)method
   public void triggerFired(Trigger trigger, JobExecutionContext context);
 // 1.若是返回true,将veto关联JobDetail的执行;
  // 2. 在triggerFired()方法以后执行
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context);  
   // 1. 当trigger misfired以后执行此方法
// 2. 须要注意的是:本方法的耗时须要被关注,由于若是耗时太长,那么当有大量triggers同时misfire时,将会出现问题
public void triggerMisfired(Trigger trigger);
// 1. jobDetail
public void triggerComplete(Trigger trigger, JobExecutionContext context, int triggerInstructionCode); }

3. 内置实现:内置实现有俩个,一个是TriggerListenerSupport抽象类,只须要实现getName()指定名称,别的方法都是空的,实现须要实现的便可。对象

另外一个是BroadcastTriggerListener,这个类又是另一个做用了,至关于一个代理吧,内部有一个TriggerListener实例的集合,当有事件通知时,广播给内部的listeners。主要代码以下:blog

private List<TriggerListener> listeners;  // 内部经过循环进行请求的分发,这样就只须要这个listener与trigger关联了
    public void triggerFired(Trigger trigger, JobExecutionContext context) { Iterator<TriggerListener> itr = listeners.iterator(); while(itr.hasNext()) { TriggerListener l = itr.next(); l.triggerFired(trigger, context); } }

 JobListener 

1. 处理与job有关的事件,包括:the job is about to be executed, and  the job has completed execution.继承

2. 接口定义:接口

public interface JobListener { public String getName(); // 1.JobDetail即将执行时触发 // 2.若是job被vetoed了,此方法不会执行
    public void jobToBeExecuted(JobExecutionContext context); // 触发时机:JobDetail即将执行,可是TriggerListener veto 了该执行时会触发此方法
    public void jobExecutionVetoed(JobExecutionContext context); public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException); }

3. 实现:与trigerListener相似,事件

方法的触发顺序:

triggerFired jobToBeExecuted job executing。。。 jobWasExecuted triggerComplete

SchedulerListener:

1. 监听scheduler的相关事件,包括job/trigger的新增移除,执行期间的报错以及scheduler的关闭。ci

2. 接口定义

public interface SchedulerListener { // 当一个JobDetail被scheduled时。 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(); }

使用Listener:

1.名字必须有;2.能够继承support类,没必要实现接口实现不须要的方法。

1.经过scheduler的ListenerManager 对象注册在scheduler上,随带着一个Matcher,用来指示listener监听的是那个trigger/job

 代码示意以下;

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

Matcher接口方法以下:

public interface Matcher<T extends Key<?>> extends Serializable { boolean isMatch(T key); public int hashCode(); public boolean equals(Object obj); }

Matcher的类型不少,能够根据本身的须要灵活应用:EverythingMatcher,GroupMatcher,KeyMatcher,NameMatcher,  AndMatcher,  NotMatcher,  OrMatcher。这些均可以经过静态方法执行使用,若是有自定义的需求,quartz还提供了StringMatcher抽象类,具体再也不赘述。

相关文章
相关标签/搜索