在Quartz调度程序中使用@DisallowConcurrentExecution
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Quartz调度程序中使用@DisallowConcurrentExecution相关的知识,希望对你有一定的参考价值。
我很抱歉,如果这个问题太天真了,我期待安排这些工作,以便逐个执行,而不是平行执行。它只执行一次。
从docs,@ DisallowConcurrentExecution是
- 一个注释,将{@link Job}类标记为一个不能同时执行多个实例的注释(实例基于{@link JobDetail}定义 - 或者换言之,基于{@link JobKey})。
但是当我安排一份同样的JobKey工作时,我会得到Failed to schedule a job org.quartz.ObjectAlreadyExistsException
如果我生成一个不同的JobKey,它不会注意到@DisallowConcurrentExecution
并且该作业正在并行执行(如文档中所述)。
请建议我如何实现这一点,任何指针都会有所帮助!
PS:我不知道将安排的工作。因此,如果作业已在运行,我需要一些方法来动态链接作业。
同样的JobKey
=同样的工作。
不同的JobKey
=不同的工作。
Quartz不会让你多次使用相同的JobKey
,因为这是两个具有相同键的作业。就像拥有两个具有相同ID的用户一样。
你需要做的是为同一个JobTrigger
安排不同的JobKey
s。
@DisallowConcurrentExecution
避免重复执行相同的工作。如果你使用不同的JobKey
,它不再是同一个工作,所以注释没有任何影响。但是对于给定JobKey
和几个JobTrigger
s,@DisallowConcurrentExecution
将阻止触发器启动新的执行工作,如果前一个尚未完成。
我建议看看Quartz's documentation,以便更深入地了解上述概念。
以上是关于在Quartz调度程序中使用@DisallowConcurrentExecution的主要内容,如果未能解决你的问题,请参考以下文章
在Quartz调度程序中使用@DisallowConcurrentExecution
如何在 Quartz.net 中通过 DI 使用添加的调度程序