在 Quartz 调度器中使用@DisallowConcurrentExecution
Using @DisallowConcurrentExecution in Quartz scheduler
如果这个问题太幼稚,我很抱歉,
我期望作业被安排好,以便它一个一个地执行 ,而不是 parallely.It 只执行一次。
来自文档,@DisallowConcurrentExecution 是
- 将 {@link Job} class 标记为不能同时执行多个实例的注释(其中实例基于 {@link JobDetail } 定义 - 或者换句话说基于 {@link JobKey}).
但是当我用相同的 JobKey 安排工作时,我得到
Failed to schedule a job org.quartz.ObjectAlreadyExistsException
如果我生成不同的 JobKey,它不会注意到 @DisallowConcurrentExecution
并且作业正在并行执行(如文档中所述)。
请建议我怎样才能做到这一点,任何指点都会有帮助!
PS: 我不知道会安排什么工作。所以,我需要一些方法来动态 link 增加工作,如果工作已经 运行。
相同 JobKey
= 相同的工作。
不同 JobKey
= 不同的工作。
Quartz 不会让您多次使用相同的 JobKey
,因为那是两个具有相同密钥的作业。就像有两个用户使用相同的 ID。
您需要为相同的 JobKey
.
安排不同的 JobTrigger
@DisallowConcurrentExecution
避免重叠执行 相同的 作业。如果你使用不同的 JobKey
,它就不再是同一个工作,所以注释没有任何效果。但是对于具有多个 JobTrigger
的给定 JobKey
,如果前一个尚未完成,@DisallowConcurrentExecution
将阻止触发器启动新的作业执行。
我建议看一下 Quartz's documentation 以更深入地理解上述概念。
如果这个问题太幼稚,我很抱歉, 我期望作业被安排好,以便它一个一个地执行 ,而不是 parallely.It 只执行一次。
来自文档,@DisallowConcurrentExecution 是
- 将 {@link Job} class 标记为不能同时执行多个实例的注释(其中实例基于 {@link JobDetail } 定义 - 或者换句话说基于 {@link JobKey}).
但是当我用相同的 JobKey 安排工作时,我得到
Failed to schedule a job org.quartz.ObjectAlreadyExistsException
如果我生成不同的 JobKey,它不会注意到 @DisallowConcurrentExecution
并且作业正在并行执行(如文档中所述)。
请建议我怎样才能做到这一点,任何指点都会有帮助!
PS: 我不知道会安排什么工作。所以,我需要一些方法来动态 link 增加工作,如果工作已经 运行。
相同 JobKey
= 相同的工作。
不同 JobKey
= 不同的工作。
Quartz 不会让您多次使用相同的 JobKey
,因为那是两个具有相同密钥的作业。就像有两个用户使用相同的 ID。
您需要为相同的 JobKey
.
JobTrigger
@DisallowConcurrentExecution
避免重叠执行 相同的 作业。如果你使用不同的 JobKey
,它就不再是同一个工作,所以注释没有任何效果。但是对于具有多个 JobTrigger
的给定 JobKey
,如果前一个尚未完成,@DisallowConcurrentExecution
将阻止触发器启动新的作业执行。
我建议看一下 Quartz's documentation 以更深入地理解上述概念。