spring boot 整合quartz 遇到的坑

本文讲述了在开发SpringBoot应用时遇到的Quartz CronTrigger自动执行问题,通过深入研究misfire策略,解析了三种处理方式:立即执行、忽略和合并执行,最终定位到qrtz_triggers表的MISFIRE_INSTR字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.先描述一下问题

在开发过程中意外发现,在启动spring boot项目时quartz cronTirgger自动执行,也就是说定时任务被自动触发。

2.问题解决

查阅资料之后发现,和quartz misfire(失火)策略有关,我们看下源码:

可以看到默认的失火策略为0,目前还不知道为0的具体含义,我们在看下面具体的方法:

这里定义了三种misfire策略(仅限于CronTrigger),查阅资料:

1.withMisfireHandlingInstructionIgnoreMisfires

所有未触发的执行都会立即执行,然后触发器按计划运行。
示例场景:安排在上午 9 点和 10 点的执行会立即执行。下一次计划执行(上午 11 点)准时运行。

2.withMisfireHandlingInstructionDoNothing

所有未触发的执行都将被丢弃,调度程序只是等待下一个调度时间。
示例场景:安排在上午 9 点和 10 点的执行被丢弃,因此基本上什么也没有发生。下一次计划执行(上午 11 点)准时运行。

3.withMisfireHandlingInstructionFireAndProceed

立即执行第一个错误的执行并丢弃其他(即所有错误的执行合并在一起)。然后回到日程。无论错过了多少次触发器执行,都只会立即执行一次。
示例场景:安排在上午 9 点和上午 10 点的执行合并并仅执行一次(换句话说:安排在上午 10 点的执行被丢弃)。下一次计划执行(上午 11 点)准时运行。

quartz持久化,具体的misfire策略存在qrtz_triggers表中的MISFIRE_INSTR字段中

 另外SimpleTrigger还有很多misfire策略,本案例不做解释,可以查阅资料:https://dzone.com/articles/quartz-scheduler-misfire

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值