在 Quartz 调度器中使用 @DisallowConcurrentExecution

Moh*_*s A 0 java quartz-scheduler

如果这个问题太幼稚,我很抱歉,我希望作业被调度,以便它一个一个地执行,而不是并行执行。它只执行一次。

从文档中,@DisallowConcurrentExecution 是

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

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

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

请建议我如何实现这一点,任何指针都会真正有帮助!

PS:我不知道会安排哪些工作。所以,如果作业已经在运行,我需要一些方法来动态链接作业。

wal*_*len 7

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

Quartz 不会让你JobKey多次使用相同的,因为那将是两个具有相同键的作业。就像有两个具有相同 ID 的用户一样。

您需要做的是JobTrigger为相同的JobKey.

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

我建议查看Quartz 的文档以更深入地了解上述概念。