如果这个问题太幼稚,我感到抱歉,
我希望可以对作业进行调度,以便它一个接一个地执行,而不是并行执行,它只能执行一次。
从文档中,@ 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
,则不再是同一工作,因此注释不会产生任何作用。但是对于给定的具有多个JobKey
的JobTrigger
,如果前一个尚未完成,则@DisallowConcurrentExecution
将阻止触发器启动该作业的新执行。
我建议看一下Quartz's documentation以更深入地了解上述概念。