阅读更多

1顶
0踩

研发管理

一.概述

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

 

二.JobListener监听器

定义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监听器

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

 

 

1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Quartz.Net进阶之五:TriggerListener 、JobListener 和 SchedulerListener

    一、介绍 今天开始学习监听器,就是 Listener,在Quartz.Net 中,主要包含3类的监听器,主要内容包括:TriggerListener 、JobListener 和 SchedulerListener 这三个东东的内容,这个东西不是很难,内容也不是很多,...

  • Quartz任务调度(4)JobListener分版本超详细解析

    在《spring学习笔记(15)趣谈spring 事件:实现业务逻辑解耦,异步调用提升用户体验》我们通过实例分析讲解了spring的事件机制,或许你会觉得其中的配置略显繁琐,而在Quartz框架中,它为我们集成了强大的事件机制,...

  • 任务调度框架Quartz(一) Quartz——一个强大的定时任务调度框架

    Quartz,水晶、石英,一个简单朴素有美丽的名字,在Java程序界,Quartz大名鼎鼎,很多Java应用几乎都集成或构建了一个定时任务调度系统,Quartz是一个定时任务调度框架。 何为定时任务调度框架?简而言之,它可以...

  • Quartz 定时任务 (2) —— 事件监听器

    一、TriggerListener 触发器监听器 跟触发器有关的事件包括**:触发器被触发,触发器触发失败,以及触发器触发完成**(触发器完成后作业任务开始运行) 1. TriggerListener 接口源码 public interface ...

  • Quartz学习——Quartz介绍(一)

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他...

  • Quartz框架源码分析——主要组件

    简介 使用 spring集成quartz quartz on springboot quartz的原理

  • Quartz与Spring集成——创建调度器

    在《Quartz与Spring集成—— SchedulerFactoryBean的初始化分析》一文中介绍过,Spring集成Quartz时的初始化过程。创建调度器也是初始化过程中的一步,本文将着重介绍Quartz初始化时是如何创建调度器的。

  • Quartz任务调度——快速入门

    一、Quartz概念 Quartz 是 OpenSymphony 开源组织在 Job scheduling 领域又一个开源项目,它可以与 J2EE 与 J2SE 应用...Quartz可以被实例化,作为独立的项目集群(负载平衡和故障转移功能),用于作业的执行 三、Quar

  • Quartz与Spring集成—— SchedulerFactoryBean的初始化分析

    Quartz是一个开源的定时调度框架,支持集群部署。我们可以通过其Java API来使用它,或者通过Spring来配置与管理,也可以结合使用两种方式。本文重点分析Quartz与Spring集成时的初始化过程。

  • Quartz.NET开源库实现作业定时调度——简单示例

    一、Quartz.NET简介 1.1、.NET Framework自带的Timer定时器介绍 很多的软件项目中都会使用到定时任务、定时轮询数据库同步,定时邮件通知等功能。.NET Framework具有“内置”定时器功能,通过System.Timers.Timer...

  • 实时监控体系:基于Prometheus的API性能指标可视化方案.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

  • 5个提升DeepSeekAPI生成质量的调参技巧,开发者必看!.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

  • ACM动态规划模板-区间修改线段树问题模板

    ACM动态规划模板-区间修改线段树问题模板

  • 深度解析C语言调试技巧:VSCode+GDB实战排错指南.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

  • 10个高效调用DeepSeekAPI的技巧:从请求优化到缓存策略.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

  • 基于Python语言的PersonRelationKnowledgeGraph设计源码

    本项目为Python语言开发的PersonRelationKnowledgeGraph设计源码,总计包含49个文件,涵盖19个.pyc字节码文件、12个.py源代码文件、8个.txt文本文件、3个.xml配置文件、3个.png图片文件、2个.md标记文件、1个.iml项目配置文件、1个.cfg配置文件。该源码库旨在构建一个用于表示和查询人物关系的知识图谱系统。

  • 成本优化指南:通过Token计算模型将API费用降低57%的秘诀.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

  • 大华智能物联平台,的对接其他接口的API,可以获得视频拉流的flv/hls/rstp 的拉流地址,demo项目为springBoot项目,可以通过摄像头的视频通道,获取到实时拉流的uRl

    rtsp实时预览接口URL:/evo-apigw/admin/API/MTS/Video/StartVideo HLS、FLV、RTMP实时预览接口方式 :接口URL/evo-apigw/admin/API/video/stream/realtime 参数名 必选 类型 说明 data true string Json串 +channelId true string 视频通道编码 +streamType true string 码流类型:1=主码流, 2=辅码流,3=辅码流2 +type true string 协议类型:hls,hlss,flv,flvs,ws_flv,wss_flv,rtmp hls:http协议,m3u8格式,端口7086; hlss:https协议,m3u8格式,端口是7096; flv:http协议,flv格式,端口7886; flvs:https协议,flv格式,端口是7896; ws_flv:ws协议,flv格式,端口是7886; wss_flv:wss协议,flv格式,端口是7896; rtmp:rtmp协议,端口是1975;

  • Simulink永磁风机飞轮储能系统二次调频技术研究:频率特性分析与参数优化,Simulink永磁风机飞轮储能二次调频技术:系统频率特性详解及参数优化研究参考详实文献及两区域系统应用,simulink

    Simulink永磁风机飞轮储能系统二次调频技术研究:频率特性分析与参数优化,Simulink永磁风机飞轮储能二次调频技术:系统频率特性详解及参数优化研究参考详实文献及两区域系统应用,simulink永磁风机飞轮储能二次调频,系统频率特性如下,可改变调频参数改善频率。 参考文献详细,两区域系统二次调频。 ,核心关键词: 1. Simulink 2. 永磁风机 3. 飞轮储能 4. 二次调频 5. 系统频率特性 6. 调频参数 7. 改善频率 8. 参考文献 9. 两区域系统 以上关键词用分号(;)分隔,结果为:Simulink;永磁风机;飞轮储能;二次调频;系统频率特性;调频参数;改善频率;参考文献;两区域系统。,基于Simulink的永磁风机与飞轮储能系统二次调频研究:频率特性及调频参数优化

Global site tag (gtag.js) - Google Analytics