当前位置:网站首页>Quartz调度框架的学习使用
Quartz调度框架的学习使用
2022-06-23 06:19:00 【来自喵星】
Quartz调度框架的学习使用
比较完整的blog:
https://blog.csdn.net/ScholarTang/article/details/118891297
入门1 (SimpleTrigger触发器)
- 添加依赖配置
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
- 创建一个类,实现Job接口,实现execute方法
- 创建调度器Scheduler
- 使用Job实现类创建任务实例JobDetail
- 创建触发器Trigger,使用的是SimpleTrigger触发器
- 绑定任务实例JobDetail和触发器Trigger
- 开启定时任务
- 具体代码:
@Slf4j
//@PersistJobDataAfterExecution //Job设置为有状态的
public class HelloJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDataMap mergedJobDataMap = jobExecutionContext.getMergedJobDataMap();
log.info(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()) + " | 任务被执行了");
}
}
public class HelloSchedulerDemo {
public static void main(String[] args) throws SchedulerException {
//从调度工厂中获取调度器实例
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//通过JobBuilder构建一个任务实例
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
//设置任务的唯一实例名称和任务组名称组名
.withIdentity("job1", "group1")
//构建实例
.build();
//通过TriggerBuilder构建触发器实例
SimpleTrigger trigger = TriggerBuilder.newTrigger()
//设置触发器唯一实例名称和触发器的组名
.withIdentity("trigger1", "group1")
//执行计划,每五秒执行一次
.withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5))
//立即执行
.startNow()
//构建实例
.build();
//调度器绑定任务实例和触发器
scheduler.scheduleJob(jobDetail,trigger);
//开启定时任务
scheduler.start();
}
}
入门2 (CronTrigger触发器)
- 创建一个类,实现Job接口,实现execute方法
- 创建调度器Scheduler
- 使用Job实现类创建任务实例JobDetail
- 创建触发器Trigger,使用的是CronTrigger触发器,支持Cron表达式
- 绑定任务实例JobDetail和触发器Trigger
- 开启定时任务
- 具体代码
public class HelloSchedulerDemo {
public static void main(String[] args) throws SchedulerException {
//从调度工厂中获取调度器实例
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//通过JobBuilder构建一个任务实例
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
//设置任务的唯一实例名称和任务组名称组名
.withIdentity("job1", "group1")
//构建实例
.build();
//通过TriggerBuilder构建触发器实例
Trigger trigger = TriggerBuilder.newTrigger()
//设置触发器唯一实例名称和触发器的组名
.withIdentity("trigger1", "group1")
//执行计划,每五秒执行一次
.withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ? *"))
//构建实例
.build();
//调度器绑定任务实例和触发器
scheduler.scheduleJob(jobDetail,trigger);
//开启定时任务
scheduler.start();
}
}
quartz中的监听器的使用
主要用到JobListener、TriggerListener、SchedulerListener对任务中的状态进行监听
- 创建一个类,实现Job接口,实现execute方法
- 创建一个类,实现全局监听器接口JobListener
- 创建调度器Scheduler对象
- 使用Job实现类创建任务实例JobDetail 对象
- 创建触发器Trigger对象,使用的是CronTrigger触发器,支持Cron表达式
- 绑定任务实例JobDetail和触发器Trigger,绑定任务实例和监听器JobListener
- 开启定时任务
- 具体代码
Job实现类:
@Slf4j
//@PersistJobDataAfterExecution //Job设置为有状态的
public class HelloJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDataMap mergedJobDataMap = jobExecutionContext.getMergedJobDataMap();
log.info("[Job执行类]"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()) + " | 任务被执行了");
}
}
JobListener实现类:
@Slf4j
public class MyJobListener implements JobListener {
@Override
public String getName() {
String name = this.getClass().getSimpleName();
log.info("[监听器]当前JobListener的名称为:" + name);
return name;
}
@Override
public void jobToBeExecuted(JobExecutionContext context) {
String name = context.getJobDetail().getJobClass().getName();
log.info("[监听器]当前Job的名称为:" + name + ",JobDetail将要被执行了...");
}
@Override
public void jobExecutionVetoed(JobExecutionContext context) {
String name = context.getJobDetail().getJobClass().getName();
log.info("[监听器]当前Job的名称为:" + name + ",JobDetail将要被执,但被TriggerListener否决...");
}
@Override
public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
String name = context.getJobDetail().getJobClass().getName();
log.info("[监听器]当前Job的名称为:" + name + ",JobDetail执行完成了...");
}
}
任务启动类:
public class HelloSchedulerDemo {
public static void main(String[] args) throws SchedulerException {
//从调度工厂中获取调度器实例
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//通过JobBuilder构建一个任务实例
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
//设置任务的唯一实例名称和任务组名称组名
.withIdentity("job1", "group1")
//构建实例
.build();
//通过TriggerBuilder构建触发器实例
Trigger trigger = TriggerBuilder.newTrigger()
//设置触发器唯一实例名称和触发器的组名
.withIdentity("trigger1", "group1")
//执行计划,每五秒执行一次
.withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ? *"))
//构建实例
.build();
//调度器绑定任务实例和触发器
scheduler.scheduleJob(jobDetail,trigger);
scheduler.getListenerManager().addJobListener(new MyJobListener(), KeyMatcher
//jobKey中的name参数和group参数对应的就是任务实例【JobDetail】的name和group
.keyEquals(JobKey.jobKey("job1","group1")));
//开启定时任务
scheduler.start();
}
}

其他监听器还有TriggerListener、SchedulerListener
边栏推荐
- C # how to obtain DPI and real resolution (can solve the problem that has been 96)
- Idea automatically generates serialVersionUID
- QT designer cannot modify the window size, and cannot change the size by dragging the window with the mouse
- RFID数据安全性实验:C#可视化实现奇偶校验、CRC冗余校验、海明码校验
- [graduation season · advanced technology Er] it's my choice. I have to walk on my knees
- 2121. sum of intervals of the same elements - hash table method
- [STL] summary of stack and queue usage of container adapter
- SSM整合
- XML schema record
- Don't look for [12 super easy-to-use Google plug-ins are here] (are you sure you want to take a look?)
猜你喜欢

【项目实训】线形箭头的变化

MySQL basic query

QT method of compiling projects using multithreading

Project_ Filter to solve Chinese garbled code

Idea automatically generates serialVersionUID

初始化层实现

GloRe

Xiaobai must see in investment and wealth management: illustrated fund buying and selling rules
![[system] right click the desktop icon. After turning around, the Explorer will crash and the desktop will be refreshed](/img/aa/0189beb065fa0d4b625390793cb79b.png)
[system] right click the desktop icon. After turning around, the Explorer will crash and the desktop will be refreshed

为什么TCP协议是三次握手而不是两次?
随机推荐
What you need to know about five insurances and one fund
Add IPAD control function into shairplay
Cetos7 record
XML schema record
MySQL index
[project training] change of linear arrow
pspnet完整代码实现
小白投资理财必看:图解基金买入与卖出规则
Cloud box is deeply convinced to create a smart dual-mode teaching resource sharing platform for Nanjing No. 1 middle school
897. 递增顺序搜索树
406 double pointer (27. remove elements, 977. square of ordered array, 15. sum of three numbers, 18. sum of four numbers)
Intentional shared lock, intentional exclusive lock and deadlock of MySQL
junit单元测试报错org.junit.runners.model.InvalidTestClassError: Invalid test class ‘xxx‘ .No runnable meth
【STL】关联容器之map用法总结
【项目实训】线形箭头的变化
深度学习系列46:人脸图像超分GFP-GAN
/Bin/sh no such file or directory problem
Lombok的使用
MySQL MVCC多版本并发控制
XML DTD record