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