Quartz 提供了三种类型的监听器:监听 Job 的,监听 Trigger 的,和监听 Scheduler 自已的。

本章解释如何应用每一种类型来更好的管理你的 Quartz 应用,并获悉到什么事件正在发生。,实现监听器的方法通用于所有的三种类型。可以分成以下步骤:

1. 创建一个 Java 类,实现监听器接口
2. 用你的应用中特定的逻辑实现监听器接口的所有方法
3. 注册监听器


 


 


 

 

JobListener 和 TriggerListener


一、 监听 Job 事件

org.quartz.JobListener 接口包含一系列的方法,它们会由 Job 在其生命周期中产生的某些关键事件时被调用。JobListener分为全局监听和局部监听,具体实现如下:

全局:JobListener jobListener = new SimpleJobListener("SimpleJobListener");         
      scheduler.addGlobalJobListener(jobListener);         
      scheduler.start(); 局部:JobListener jobListener =new SimpleJobListener("SimpleJobListener");            
      scheduler.addJobListener(jobListener);                    
      jobDetail.addJobListener(jobListener.getName());               
      scheduler.scheduleJob(jobDetail, trigger);           
      scheduler.start();

注意注册的方法,另外对于非全局的 JobListener,它应于任何引用到它的 JobDetail 使用 schedulerJob() 或 addJob() 方法注册之前被注册。

二、监听 Trigger 事件


org.quartz.TriggerListener 接口也包含一系列给 Scheduler 调用的方法。然而,与 JobListener 有所不同的是, TriggerListener

 

监听的实现和job的监听基本差不多,对于全局和局部说明:

scheduler.addGlobalTriggerListener(new SimpleMyTriggerListener()); 和

scheduler.addTriggerListener( triggerListener

 

对于局部监听要注意是的对特定的trigger.addTriggerListener( triggerListener.getName()

添加监听,注意名字要监听器的名称要相同。

和非全局的 JobListener 提到的相同的警告可以应用到这里来;你必须在把它设置给 Trigger 实例并存储了 Trigger 之前把 TriggerListener

 

三、 监听 Scheduler 事件

org.quartz.SchedulerListener
public void startScheduler() throws SchedulerException {          
Scheduler scheduler = null;          
scheduler = StdSchedulerFactory.getDefaultScheduler();          
//添加监听
SchedulerListener schedulerListener = new SimpleSchedulerListener();         
scheduler.addSchedulerListener(schedulerListener);         
scheduler.start();         
//注册作业和触发器        
JobDetail jobDetail = new JobDetail("PrintInfoJob",Scheduler.DEFAULT_GROUP, MyJob.class);          
Trigger trigger = TriggerUtils.makeSecondlyTrigger(5);          
trigger.setName("SimpleTrigger");         
trigger.setStartTime(new Date());          
scheduler.scheduleJob(jobDetail, trigger);      
}


在代码中,Scheduler 创建后是在 Job 注册之前被启动的。这就使得在 Job 部署时 jobScheduled() 方法能得到调用。我们也改变了 Trigger 只重复两次而不是无限的运行。这样能强制 triggerFinalized() 方法被调用,因为这个 Trigger 不再有机会触发了。除了这些人为的条件外,使用 SchedulerListener 就和使用 Job 或 Trigger 监听器是一样的了。