quartz做定时任务太常见了,最近遇到一个业务场景,要求在前一次任务没有结束的情况下,不触发下次任务,计算超时也不触发。先在网上找了一波发现没有真正说到点子上的,就在这记录下我的经验,备忘并抛砖引玉。
言归正传,quartz实现定时任务需要用到三个接口Scheduler-Trigger-JobDetail,于是就一个个找这仨的接口说明,Scheduler没有收获,Trigger也没有收获,JobDetail看到个有关的方法isConcurrentExecutionDisallowed(),发现曙光,八成就在这个JobDetail上做文章,然后看了他的实现类JobDetailImpl,发现quartz原始是通过判断job实现类是否加了注解来确定是否进行同步触发任务,就是JobBuilder.newJob()方法的传参,传入的是个类,只要在这个类上加上注解“@DisallowedConcurrentExecution”,就可以实现同步调用任务。

本文探讨了如何在Quartz中实现任务的同步执行,即在前一次任务未完成时,阻止新任务的触发,即使超时也不例外。关键在于使用`@DisallowedConcurrentExecution`注解来标记任务类,确保任务按顺序执行,避免并发问题。通过对Scheduler、Trigger和JobDetail接口的研究,找到了解决方案并详细阐述了其实现过程。
1745

被折叠的 条评论
为什么被折叠?



