java在Quartz调度器中使用@DisallowConcurrentExecution
如果这个问题太天真,我很抱歉, 我希望作业被安排成一个接一个地执行,而不是并行执行。它只执行一次
从文档中,@DisallowConcurrentExecution是
- 将{@link Job}类标记为不能同时执行多个实例的注释(其中实例基于{@link JobDetail}定义,或者换句话说,基于{@link JobKey})李>
但当我用相同的工作密钥安排一份工作时,我会
Failed to schedule a job org.quartz.ObjectAlreadyExistsException
如果我生成一个不同的JobKey,它就不会注意到@DisallowConcurrentExecution
,而且作业是并行执行的(如文档中所述)
请建议我如何做到这一点,任何指点都会很有帮助
PS:我不知道会安排哪些工作。所以,如果作业已经在运行,我需要一些方法来动态链接作业
# 1 楼答案
相同的
JobKey
=相同的工作不同的
JobKey
=不同的工作Quartz不允许您多次使用相同的
JobKey
,因为这将是两个具有相同密钥的作业。比如有两个相同ID的用户你需要做的是为相同的
JobKey
安排不同的JobTrigger
@DisallowConcurrentExecution
避免重复执行相同的作业。如果使用不同的JobKey
,它就不再是同一个作业,因此注释没有任何效果。但是对于一个给定的JobKey
和多个JobTrigger
,如果前一个作业尚未完成,那么@DisallowConcurrentExecution
将阻止触发器启动新的作业执行我建议看一看Quartz's documentation,以便更深入地理解上述概念