springboo quartz定时执行任务

SpringBoot Quartz指定时间执行任务及取消未执行的定时任务

使用quartz实现周期执行任务。遇到需要指定时间执行任务的需求,第一时间考虑到了Timer定时,简单好用。但是业务中需要你 取消该定时任务、并且 考虑大量定时任务的时候。Timer就显得有些力不从心了。底层机制: Timer走后台进行定时任务,Quartz能使用多个线程执行定时任务
Timer管理并发任务的缺陷:

Timer有且仅有一个线程去执行定时任务,如果存在多个任务,且任务时间过长,会导致执行效果与预期不符。
当任务抛出异常时的缺陷,如果TimerTask抛出RuntimeException,Timer会停止所有任务的运行。

Quartz指定时间执行任务

一:添加依赖

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.1</version>
</dependency>

二:实例化需要定时的任务
需要定时的任务必须实现Job(org.quartz.Job)这个接口,实现这个接口需要实例化
**void execute(JobExecutionContext jobExecutionContext)**这个方法。
在这个方法里面编写自己需要实现执行的任务:
在这里插入图片描述
三:构建一个JobBuilder的实例

 JobDetail jobDetail=JobBuilder
					 .newJob(自己实例化的定时任务.class)
 					 .withIdentity("任务名","组名")
					 .build();

参数解释:
自己实例化的定时任务:ClockTask(第一步 中自己实例化的任务)
任务名:Task1(自己命名)
组名:group1(自己命名,便于对这个组里的任务进行管理)

四:编写触发器
很重要,很重要
Quartz提供了多种触发器:
Tigger
SimpleTrigger
CronTrigger
CalendarIntervalTrigger
CoreTrigger
DailyTimeIntervalTrigger等
这里用到的是SimpleTrigger触发器实现的指定时间执行

SimpleTrigger simple=TriggerBuilder.newTrigger()
.withIdentity("task1","group1")
.startAt(new Date())
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(0)
.withRepeatCount(0))
.build();

参数解释:
withIdentity(“task1”,“group1”):这里的任务名和组名与我第三步设置的相同
.startAt:这里输入一个Date类型的时间,指定这个任务什么时候执行
.withIntervalInSeconds(0):每隔多少秒执行一次
withRepeatCount(0):这里输入想要重复执行的次数

五:通过Scheduler调度器来调度

@Autowired
    private Scheduler scheduler;
	scheduler.scheduleJob(jobDetail,simple);
	scheduler.start();

参数解释:
jobDetail:第三步构建的JobBuilder的实例
simple:第四步构建的触发器

六:取消未执行的定时任务
用第五步的scheduler

scheduler.deleteJob(new JobKey("task1","group1"));

参数解释:
删除group组里名为task1的定时任务

七:如何向execute方法里传参

通过第三步构建出来的jobDetail 以map的形式传值

jobDetail.getJobDataMap.put("aaa","AAA")

在第二步的execute的方法里

jobExecutionContext.getJobDataMap().get("aaa")

能往execute传参真的能解决了很多问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值