在Quartz Scheduler中使用@DisallowConcurrentExecution

时间:2019-04-27 15:30:12

标签: java quartz-scheduler

很抱歉,如果这个问题太幼稚, 我希望可以对作业进行计划,以便它一次执行而不是并行执行。它只能执行一次。

在文档中,@ DisallowConcurrentExecution是

  • 一种将{@link Job}类标记为不能同时执行多个实例的注释(其中实例基于{@link JobDetail}定义-或换句话说,基于{@link JobKey })。

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

如果我生成其他JobKey,则它不会引起注意@DisallowConcurrentExecution,并且该作业将并行执行(如文档中所述)。

请提出如何实现此目标,任何指针都将真正有帮助!

PS:我不知道将要安排的工作。因此,如果作业已经在运行,我需要一些方法来动态链接这些作业。

1 个答案:

答案 0 :(得分:2)

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

Quartz不允许您多次使用相同的JobKey,因为这将是两个具有相同密钥的作业。就像有两个具有相同ID的用户一样。

您需要为同一JobTrigger安排不同的JobKey

@DisallowConcurrentExecution避免了 same 作业的重复执行。如果您使用不同的JobKey,那么它将不再是同一工作,因此注释不会有任何作用。但是对于给定的JobKey有几个JobTrigger的情况,如果前一个尚未完成,@DisallowConcurrentExecution将阻止触发器启动该作业的新执行。

我建议看看Quartz's documentation,以更深入地了解上述概念。