开发者社区 问答 正文

spring中的quartz不要并发执行 要设置哪呢

我现在用的Spring的2.5.6 Quartz的1.6

然后我现在的任务比如设置为5分钟

但是调用的方法执行时间超过了5分钟

理想上我是希望 比如该方法这次调用超过5分钟 那下次调用就会不调用 或延时调用。

我查阅了一些资料发现 国内这方面资料不多。

好不容易在数据库里 qrtz_job_details表里找到了 is_nonconcurrent(VARCHAR2(1)) 这个字段,我后来把他设成了1 不过貌似还是不行。

求大神给个答案。小弟在此谢谢了

展开
收起
a123456678 2016-03-16 15:42:41 4019 分享 版权
2 条回答
写回答
取消 提交回答
  • 在定时任务Job类上添加 @DisallowConcurrentExecution 注解

    image.png

    从源码中可以看到这个方法用来控制是否并发执行 image.png

    而这个方法的判断依据是基于该类是否有@DisallowConcurrentExecution注解 image.png

    image.png

    如果加上还是不行,试一试加上注解后把任务删除后重新创建

    2020-10-21 17:00:50
    赞同 展开评论
  • 不并发有两种方式:

    1、使用spring xml配置,对jobDetail bean的concurrent属性设置为false;(隐约记得不写默认好像也是false)(推荐)

    2、将job设置成有状态,即继承statefuljob接口。这个比较麻烦,不推荐使用。

    3、或者将quartz properties配置中的连接池大小,改为1,这样肯定就不能并行(不推荐)

    2019-07-17 19:04:02
    赞同 展开评论