李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
05.Quartz监听器
Leefs
2021-08-30 AM
1808℃
0条
# 05.Quartz监听器 ### 一、概述 #### 1.1 简介 Quartz的监听器用于当任务调度中你所关注事件发生时,能够及时获取这一事件的通知。类似于任务执行过程中的邮件、短信类的提醒。 #### 1.2 种类 Quartz监听器主要有`JobListener`、`TriggerListener`、`SchedulerListener`三种,分别表示任务、触发器、调度器对应的监听器。 + **JobListener:**任务调度过程中,与任务Job相关的事件包括job开始要执行的提示,job执行完成的提示灯。 + **TriggerListener:**任务调度过程中,与触发器Trigger相关的事件包括触发器触发、触发器未正常触发、触发器完成等。 + **SchedulerListener:**会在Scheduler的生命周期中关键事件发生时被调用。与Scheduler有关的事件包括:增加一个job/trigger,删除一个job/trigger,scheduler发生严重错误,关闭scheduler等。 #### 1.3 全局监听器与非全局监听器 **全局监听器:**能够接收到所有的Job/Trigger的事件通知 ```java JobListener jobListener = new SimpleJobListener("SimpleJobListener"); scheduler.addGlobalJobListener(jobListener); scheduler.start(); ``` **非全局监听器:**只能接收到在其上注册的Job或Trigger的事件,不在其上注册的Job或Trigger则不会进行监听。 ```java JobListener jobListener =new SimpleJobListener("SimpleJobListener"); scheduler.addJobListener(jobListener); jobDetail.addJobListener(jobListener.getName()); scheduler.scheduleJob(jobDetail, trigger); scheduler.start(); ``` 对于非全局的 `JobListener`,它应于任何引用到它的 `JobDetail` 使用 `schedulerJob()` 或 a`ddJob()` 方法注册之前被注册。 ### 二、JobListener监听器实现 #### 2.1 创建Job接口实现类 ```java import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import java.text.SimpleDateFormat; import java.util.Date; /** * @author lilinchao * @date 2021/8/27 * @description 1.0 **/ public class HelloJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //打印当前执行时间 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("现在的时间是:"+ sf.format(new Date())); } } ``` #### 2.2 自定义Job监听器实现JobListener接口 ```java import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobListener; /** * @author lilinchao * @date 2021/8/28 * @description 1.0 **/ public class MyJobListerner implements JobListener { @Override public String getName() { String name = this.getClass().getSimpleName(); System.out.println("监听器的名称为: "+name); return name; } @Override public void jobToBeExecuted(JobExecutionContext jobExecutionContext) { String name = jobExecutionContext.getJobDetail().getKey().getName(); System.out.println("被监听的job的name是:"+name+" Scheduler在JobDetail将要被执行时调用的方法"); } @Override public void jobExecutionVetoed(JobExecutionContext jobExecutionContext) { String name = jobExecutionContext.getJobDetail().getKey().getName(); System.out.println(name +"Scheduler在JobDetail即将执行,但又被TriggerListerner否决时会调用的方法"); } @Override public void jobWasExecuted(JobExecutionContext jobExecutionContext, JobExecutionException e) { String name = jobExecutionContext.getJobDetail().getKey().getName(); System.out.println(name+"Scheduler是在JobDetail被执行之后调用这个方法的"); } } ``` #### 2.3 调度器的创建与执行 ```java import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.matchers.KeyMatcher; /** * @author lilinchao * @date 2021/8/27 * @description 1.0 **/ public class HelloScheduler { public static void main(String[] args) throws SchedulerException { //1.获取调度器 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); //2.获取任务实例JobDetail JobDetail jobDetail = JobBuilder .newJob(HelloJob.class) .withIdentity("job1", "jobGroup1") .build(); //3.生成触发器 SimpleTrigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(SimpleScheduleBuilder. repeatSecondlyForever(5).//每5秒执行一次 withRepeatCount(2)) //执行3次 .build(); //4.关联任务和触发器,保证按照触发器定义的条件执行任务 scheduler.scheduleJob(jobDetail, trigger); //创建并注册一个全局的JobListerner //scheduler.getListenerManager().addJobListener(new MyJobListerner(), EverythingMatcher.allJobs()); //创建并注册一个局部的JobListerner scheduler.getListenerManager().addJobListener(new MyJobListerner(), KeyMatcher.keyEquals(JobKey.jobKey("job1", "group1"))); scheduler.start(); } } ``` **运行结果** ``` 监听器的名称为: MyJobListerner 现在的时间是:2021-08-28 10:12:33 监听器的名称为: MyJobListerner 监听器的名称为: MyJobListerner 现在的时间是:2021-08-28 10:12:38 监听器的名称为: MyJobListerner 监听器的名称为: MyJobListerner 现在的时间是:2021-08-28 10:12:43 监听器的名称为: MyJobListerner ``` *附:* *参考文章链接地址:https://www.cnblogs.com/mengrennwpu/p/7191229.html*
标签:
Quartz
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1406.html
上一篇
04.Quartz触发器之CronExpression表达式
下一篇
【转载】06.Quartz配置quartz.properties详解
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
6
标签云
MySQL
Jenkins
Eclipse
Spark Core
Kibana
Flume
Livy
Nacos
JavaScript
Filter
Stream流
Flink
Scala
Java阻塞队列
持有对象
数学
Redis
Beego
Java工具类
CentOS
随笔
Spark
LeetCode刷题
Map
Quartz
NIO
数据结构和算法
DataWarehouse
Http
VUE
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭