李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
05.Quartz监听器
Leefs
2021-08-30 AM
1642℃
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
4
标签云
Netty
Azkaban
容器深入研究
Redis
Filter
CentOS
设计模式
Nacos
RSA加解密
Hadoop
Eclipse
链表
GET和POST
LeetCode刷题
Livy
锁
Linux
Yarn
数据结构
栈
Thymeleaf
Stream流
Flink
SpringBoot
排序
Http
散列
Docker
JavaWeb
SpringCloudAlibaba
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭