keeplived可以解决quartz前置任务任务并发吗

本教程的重点是防止quartz前置任务任務并行和在任务中获取Spring中Bean的方法对应教程第三和第四部分。




quartz前置任务的文档看前几章知道Job,JobDetailTrigger和Scheduler分别是做什么用的即可。Spring中关于quartz前置任务的相关文档需要仔细阅读其中的相关配置看懂后直接粘贴复制到项目配置文件中,更改为自己需要的配置即可



首先说"JobDetail配置 2",官方介绍如下:按照官方的意思,就是说简单情况下如果你的定时任务只是需要调用某个Spring对象的某个方法,可以用这个配置来简单配置下concurrent设置为false可以防止任务并发执行。这种配置在简单的情况下可用但是功能不强,用处不大


  

只要是继承的quartz前置任务JobBean,就可以通过这种方式直接向Job的属性中传递值如上例中的


 
 
 
 
  • simpleTrigger每个一段时间执行一次的计划任务。jobDetail就是前面介绍的JobDetailstartDelay表示系统启动起来后过(延后)多长时间开始执荇任务,单位:毫秒repeatInterval表示任务执行时间间隔,单位:毫秒
    quartz前置任务中自带的scheduler有两种,其中一种是做测试用的也就是说只有一个是实際开发用的,所以Spring相应的只推荐一种配置示例如下:

  

上面配置可直接粘贴复制拿来用,list里配置所有需要使用的trigger


三、防止quartz前置任务任务並行(干货一)


四、在任务中获取Spring管理Bean(干货二)


原创不易,转帖请注明出处 — ShiZhongqi
}
  • 该时间段应该执行几个任务还是會执行几个任务即使上一个任务执行完毕后已经超过该时间段
}

默认情况下当Job执行时间超过间隔时间时,调度框架为了能让任务按照我们预定的时间间隔执行会马上启用新的线程执行任务。

若我们希望当前任务执行完之后再执行丅一轮任务也就是不要并发执行任务,该如何解决呢

第一种方法:设置 quartz前置任务.threadPool.threadCount 最大线程数为 1。这样到了第二次执行任务时若当前還没执行完,调度器想新开一个线程执行任务但我们却设置了最大线程数为 1 个(即:没有足够的线程提供给调度器),则调度器会等待當前任务执行完之后再立即调度执行下一次任务。(注意:此方法仅适用于quartz前置任务中仅有一个Job如果有多个Job,会影响其他Job的执行)

//不尣许此 Job 并发执行任务(禁止新开线程执行)
 
}

我要回帖

更多关于 quartz前置任务 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信