`
liumayulingyan
  • 浏览: 148602 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

Quartz定时任务学习(九)Quartz监听器

阅读更多

转载:http://hi.baidu.com/xulin_1027/item/14a98dbc2c3d75432aebe3f3

 

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

本章解释如何应用每一种类型来更好的管理你的 Quartz 应用,并获悉到什么事件正在发生。

实现监听器的方法通用于所有的三种类型。可以分成以下步骤:
1. 创建一个 Java 类,实现监听器接口
2. 用你的应用中特定的逻辑实现监听器接口的所有方法
3. 注册监听器

 

JobListener 和 TriggerListener 可被注册为全局或非全局监听器。一个全局监听器能接收到所有的 Job/Trigger 的事件通知。而一个非全局监听器(或者说是一个标准的监听器) 只能接收到那些在其上已注册了监听器的 Job 或 Triiger 的事件。

 

一、 监听 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 接口还有关于 Trigger 实例生命周期的方法。

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

scheduler.addGlobalTriggerListener(new SimpleMyTriggerListener());
和
scheduler.addTriggerListener( triggerListener );

 

对于局部监听要注意是的对特定的trigger.addTriggerListener( triggerListener.getName() );添加监听,注意名字要监听器的名称要相同。

和非全局的 JobListener 提到的相同的警告可以应用到这里来;

你必须在把它设置给 Trigger 实例并存储了 Trigger 之前把 TriggerListener 加入到 Scheduler 中。

 

 

三、 监听 Scheduler 事件

 

org.quartz.SchedulerListener 接口包含了一系列的回调方法,它们会在 Scheduler 的生命周期中有关键事件发生时被调用。

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 监听器是一样的了。

 

关于监听类可以查考API具体了解其中方法

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics