在 Quartz 调度器中使用@DisallowConcurrentExecution

Using @DisallowConcurrentExecution in Quartz scheduler

如果这个问题太幼稚,我很抱歉, 我期望作业被安排好,以便它一个一个地执行 ,而不是 parallely.It 只执行一次。

来自文档,@DisallowConcurrentExecution 是

但是当我用相同的 JobKey 安排工作时,我得到 Failed to schedule a job org.quartz.ObjectAlreadyExistsException

如果我生成不同的 JobKey,它不会注意到 @DisallowConcurrentExecution 并且作业正在并行执行(如文档中所述)。

请建议我怎样才能做到这一点,任何指点都会有帮助!

PS: 我不知道会安排什么工作。所以,我需要一些方法来动态 link 增加工作,如果工作已经 运行。

相同 JobKey = 相同的工作。
不同 JobKey = 不同的工作。

Quartz 不会让您多次使用相同的 JobKey,因为那是两个具有相同密钥的作业。就像有两个用户使用相同的 ID。

您需要为相同的 JobKey.

安排不同的 JobTrigger

@DisallowConcurrentExecution 避免重叠执行 相同的 作业。如果你使用不同的 JobKey,它就不再是同一个工作,所以注释没有任何效果。但是对于具有多个 JobTrigger 的给定 JobKey,如果前一个尚未完成,@DisallowConcurrentExecution 将阻止触发器启动新的作业执行。

我建议看一下 Quartz's documentation 以更深入地理解上述概念。