如果这个问题太幼稚,我感到抱歉,
我希望可以对作业进行调度,以便它一个接一个地执行,而不是并行执行,它只能执行一次。

从文档中,@ DisallowConcurrentExecution是


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


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

如果我生成其他JobKey,则它不注意@DisallowConcurrentExecution并且该作业正在并行执行(如docs中所述)。

请提出我该如何实现这一点,任何指针都将真正有帮助!

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

最佳答案

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

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

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

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

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

07-24 09:35