`
eksliang
  • 浏览: 599564 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Quartz——TriggerListener和JobListener

阅读更多

转载请出自出处:http://eksliang.iteye.com/blog/2208624

一.概述

listener是一个监听器对象,用于监听scheduler中发生的事件,然后执行相应的操作;你可能已经猜到了,TriggerListeners接受与trigger相关的事件,JobListeners接受与jobs相关的事件。

 

二.JobListener监听器

 job相关的事件包括:job即将执行时触发以及job执行完毕时触发。

具体实例如下所示:

定义job类,用来打印任务详情,代码如下:

package com.ickes.job;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
 * 实现Job接口,定义运行的任务
 * @author Ickes
 */
public class SimpleJob implements Job {

	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		//打印任务详情
		System.out.println(
				context.getJobDetail().getGroup() 
				+"——"+context.getJobDetail().getName()
				+"——"+context.getTrigger().getName()
				+"——"+context.getTrigger().getGroup());
	}

}

JobListener监听器类,代码如下:

package com.ickes.job;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;

/**
 * JobListener监听器
 * @author Ickes
 */
public class Job1Listener implements JobListener {
	/**
	 * 返回当前监听器的名字,这个方法必须被写他的返回值;
	 * 因为listener需要通过其getName()方法广播它的名称
	 */
	public String getName() {
		  return "Job1Listener";
	}
	
	/**
	 * 任务被触发前触发
	 */
	public void jobToBeExecuted(JobExecutionContext context) {
		System.out.println(context.getJobDetail().getName()+":A");
	}
	/**
	 * 这个不管
	 */
	public void jobExecutionVetoed(JobExecutionContext context) {
		System.out.println(context.getJobDetail().getName()+":B");
	}
	/**
	 * 任务调度完成后触发
	 */
	public void jobWasExecuted(JobExecutionContext context,
			JobExecutionException jobException) {
		System.out.println(context.getJobDetail().getName()+":C");
	}

}

JobListener监听器测试类,代码如下:

package com.ickes.job;

import java.util.Date;

import org.quartz.JobDetail;
import org.quartz.JobListener;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @author Ickes
 */
public class ListenerDemo {
	public static void main(String[] args) throws Exception {
		//第一步:创建一个JobDetail实例
		JobDetail jobDetail = new JobDetail("j_job1","j_group1", SimpleJob.class);
		//第二步:通过SimpleTrigger触发器定义调度规则:马上启动,每2秒运行一次,共运行100次
		SimpleTrigger simpleTrigger = new SimpleTrigger("t_job1","t_group1"); 
		simpleTrigger.setStartTime(new Date());
		simpleTrigger.setEndTime(new Date(System.currentTimeMillis()+1000*5));
        simpleTrigger.setRepeatInterval(2000); //运行间隔单位为毫秒  
        simpleTrigger.setRepeatCount(10);     //运行次数  
        
		//第三步:通过SchedulerFactory获取一个调度器实例
		SchedulerFactory schedulerFactory = new StdSchedulerFactory();
		Scheduler scheduler = schedulerFactory.getScheduler();
		//第四步:关联监听器
		JobListener listener = new Job1Listener();
		scheduler.addJobListener(listener);
		jobDetail.addJobListener(listener.getName());
		
		//第五步:将job跟trigger注册到scheduler中进行调度
		scheduler.scheduleJob(jobDetail, simpleTrigger);
		//第六步:调度启动
		scheduler.start();		
		
	}
}

 

三.TriggerListener监听器

trigger相关的事件包括:trigger的触发、trigger错过触发(misfire)以及trigger的完成(即trigger触发的job执行完成)。

具体实例如下所示:

Trigger1Listener监听器类,该类实现了TriggerListener接口,代码如下:

package com.ickes.job;

import org.quartz.JobExecutionContext;
import org.quartz.Trigger;
import org.quartz.TriggerListener;
/**
 * 
 * @author Ickes
 *
 */
public class Trigger1Listener implements TriggerListener {

	public String getName() {
		return "Trigger1Listener";
	}
	/**
	 * 被调度时触发,和它相关的org.quartz.jobdetail即将执行。
	 * 该方法优先vetoJobExecution()执行
	 */
	public void triggerFired(Trigger trigger, JobExecutionContext context) {
		System.out.println("A");
	}
	/**
	 * 被调度时触发,和它相关的org.quartz.jobdetail即将执行。
	 */
	public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
		System.out.println("B");
		return false;
	}
	/**
	 * 被调度时,触发失败时触发
	 */
	public void triggerMisfired(Trigger trigger) {
		System.out.println("C");
	}
	/**
	 * 执行完毕时触发
	 */
	public void triggerComplete(Trigger trigger, JobExecutionContext context,
			int triggerInstructionCode) {
		System.out.println("D");
	}

}

 

TriggerListener监听器测试类TriggerListenerDemo代码如下:

package com.ickes.job;

import java.util.Date;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerListener;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @author Ickes
 */
public class TriggerListenerDemo {
	public static void main(String[] args) throws Exception {
		//第一步:创建一个JobDetail实例
		JobDetail jobDetail = new JobDetail("j_job1","j_group1", SimpleJob.class);
		//第二步:通过SimpleTrigger触发器定义调度规则:马上启动,每2秒运行一次,共运行100次
		SimpleTrigger simpleTrigger = new SimpleTrigger("t_job1","t_group1"); 
		simpleTrigger.setStartTime(new Date());
		//5秒钟还有任务没有完成,所以
		simpleTrigger.setEndTime(new Date(System.currentTimeMillis()+1000*5));
        simpleTrigger.setRepeatInterval(2000); //运行间隔单位为毫秒  
        simpleTrigger.setRepeatCount(10);      //运行次数  
        
		//第三步:通过SchedulerFactory获取一个调度器实例
		SchedulerFactory schedulerFactory = new StdSchedulerFactory();
		Scheduler scheduler = schedulerFactory.getScheduler();
		//第四步:关联监听器
		TriggerListener listener = new Trigger1Listener();
		scheduler.addTriggerListener(listener);
		simpleTrigger.addTriggerListener(listener.getName());
		
		//第五步:将job跟trigger注册到scheduler中进行调度
		scheduler.scheduleJob(jobDetail, simpleTrigger);
		//第六步:调度启动
		scheduler.start();		
		
	}
}

 

 

三.SchedulerListener监听器

SchedulerListener与TriggerListener、JobListener类似,但它仅接收来自Scheduler自身的消息,而不一定是某个具体的trigger或job的消息。 

scheduler相关的消息包括:job/trigger的增加、job/trigger的删除、scheduler内部发生的严重错误以及scheduler关闭的消息等;

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(); 
} 

 SchedulerListener也是注册到scheduler的ListenerManager上的 ,这里就不做笔记了

 

分享到:
评论

相关推荐

    Quartz2.2.1之JobListener、Triggerlistener、SchedulerListener实例使用

    Quartz2.2.1之JobListener、Triggerlistener、SchedulerListener实例使用,具体效果与过程看博文 http://blog.csdn.net/evankaka/article/details/45498363

    Quartz——作业调度框架

    NULL 博文链接:https://zhangyumeng.iteye.com/blog/286528

    人物调度Quartz 学习

    任务执行过程可以通过JobListener和TriggerListener进行监控,它们可以在任务开始和结束时接收通知。 4. **任务持久化(Job Persistence)**:Quartz 提供JobStore接口,允许不同的持久化策略。JDBCJobStore将Jobs...

    quartz的项目源码——用于和文章配套学习

    - 你还可以通过实现`org.quartz.SchedulerListener`和`org.quartz.JobListener`接口来监听Scheduler和Job的事件。 8. **错误处理和恢复策略** - 通过实现`org.quartz.Job`接口中的`execute()`方法,你可以处理Job...

    Quartz 2.2.2 eclipse java 工程开发环境以及官方examples示例

    - TriggerListener 和 JobListener:添加监听器以获取 Job 和 Trigger 执行的相关信息。 5. **工程结构**:这个 Eclipse 工程应该包含了 Quartz 的库依赖,每个 example 作为一个独立的 Java 类,以及运行这些例子...

    Quartz使用指南

    7. **监听器**:TriggerListener 和 JobListener 用于监听 Job 和 Trigger 的事件,例如 Job 的执行开始、结束,Trigger 的触发等。通过实现这些接口,你可以实现自定义的行为,比如日志记录、错误处理或通知机制。 ...

    定时任务管理-quartz.zip

    5. **插件和API**:Quartz还提供了一些插件,如JobStore插件用于存储Job和Trigger,以及TriggerListener和JobListener,它们可以在Job执行前后执行自定义操作。Quartz的API友好且强大,使得集成到现有项目中变得容易...

    quartz由浅入深共21页.pdf.zip

    - TriggerListener和JobListener:监听Trigger的触发和Job的执行情况,提供日志记录、异常处理等扩展功能。 总的来说,Quartz是一个强大且灵活的作业调度框架,通过理解其核心概念和配置方式,可以有效地在Java应用...

    开发工具:基于Quartz的定时任务服务系统

    4. **插件化**:Quartz提供了丰富的插件,如JobStore插件用于存储任务和触发器,TriggerListener和JobListener用于监听任务执行状态。 5. **易用性**:Quartz提供了一套直观的API,使得开发者能够方便地创建、调度和...

    定时任务管理带WEB管理界面-quartz-web.zip

    4. **插件化设计**:Quartz提供了许多插件,如JobStore插件用于存储任务和触发器,TriggerListener和JobListener用于监听任务执行状态。 Quartz-Web项目增加了Web界面,使得管理变得更加直观和易用: 1. **任务创建...

    定时器quartz API文档

    9. **错误处理与回调**:Quartz提供异常处理机制,当Job执行抛出异常时,可以通过实现`org.quartz.JobListener`或`org.quartz.TriggerListener`接口来进行错误处理和回调。 10. **扩展性**:Quartz的灵活性使得它...

    quartz定时任务

    - **任务触发监听器**:通过实现TriggerListener和JobListener接口,可以监控任务的触发和执行状态。 6. **异常处理和监控** - **错误处理**:当Job执行出现异常时,可以通过设置`@DisallowConcurrentExecution`...

    Quartz Spring整合——附带webservice Demo

    在"Quartz Spring整合——附带webservice Demo"的项目中,我们可以看到如何将这两个强大的工具结合在一起。这个Demo可能包含了一个使用Quartz调度器来触发Web服务调用的示例。Web服务(Webservice)是一种基于标准的...

    quartzJAVA包和api

    6. **监听器(Listeners)**:Quartz提供了多种类型的监听器,如JobListener、TriggerListener和SchedulerListener,它们可以监听Job执行、Trigger触发和Scheduler的状态变化,从而实现更细粒度的控制和日志记录。...

    quartz源码(简译“石英”)

    5. **插件扩展**:Quartz提供了一系列插件,如JobStore插件用于存储调度信息,TriggerListener和JobListener插件可以监听任务的执行状态。 6. **API友好**:Quartz提供了简洁的API,使得开发者可以方便地创建、调度...

    quartz-1.8.6.jar

    9. **异常处理**:可以通过实现`org.quartz.JobListener`和`org.quartz.TriggerListener`接口来监听Job的执行情况,进行异常处理。 10. **Job持久化**:为了在应用重启后还能恢复Job和Trigger,通常会配置Quartz...

    quartz包和官方例子

    - Quartz提供了多种监听器,如JobListener、TriggerListener和SchedulerListener,可以监听Job执行、Trigger触发和Scheduler状态变化,为日志记录、监控和异常处理提供便利。 6. **API与配置**: - Quartz提供了...

    问题点滴 QuartzDemo

    6. **监听器**:Quartz允许我们定义JobListener和TriggerListener,它们会在Job执行前后或Trigger触发时触发一些回调事件,便于监控和日志记录。 学习QuartzDemo的过程中,我们需要理解以下几个关键概念: - ...

    IOS应用源码——QuartzDemo.rar

    QuartzDemo是一个针对iOS平台的源码示例项目,它主要展示了如何使用Quartz 2D图形编程接口来创建自定义的视觉效果和图形。Quartz 2D是Apple为iOS和Mac OS X提供的一种核心图形库,允许开发者在应用程序中绘制2D图形...

    定时任务quartz实现分组串行并行动态配置

    Quartz也提供了`JobListener`和`TriggerListener`,可以对Job的执行结果进行监控,实现定制化的错误处理逻辑。 9. **配置灵活性**:Quartz的配置非常灵活,可以通过XML、Java代码或API进行。这使得我们能够根据需求...

Global site tag (gtag.js) - Google Analytics