在Quartz调度程序中使用@DisallowConcurrentExecution

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Quartz调度程序中使用@DisallowConcurrentExecution相关的知识,希望对你有一定的参考价值。

我很抱歉,如果这个问题太天真了,我期待安排这些工作,以便逐个执行,而不是平行执行。它只执行一次。

从docs,@ DisallowConcurrentExecution是

  • 一个注释,将{@link Job}类标记为一个不能同时执行多个实例的注释(实例基于{@link JobDetail}定义 - 或者换言之,基于{@link JobKey})。

但是当我安排一份同样的JobKey工作时,我会得到Failed to schedule a job org.quartz.ObjectAlreadyExistsException

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

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

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

答案

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

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

你需要做的是为同一个JobTrigger安排不同的JobKeys。

@DisallowConcurrentExecution避免重复执行相同的工作。如果你使用不同的JobKey,它不再是同一个工作,所以注释没有任何影响。但是对于给定JobKey和几个JobTriggers,@DisallowConcurrentExecution将阻止触发器启动新的执行工作,如果前一个尚未完成。

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

以上是关于在Quartz调度程序中使用@DisallowConcurrentExecution的主要内容,如果未能解决你的问题,请参考以下文章

在Quartz调度程序中使用@DisallowConcurrentExecution

如何在 Quartz.net 中通过 DI 使用添加的调度程序

Quartz.Net 调度程序在 Azure 中不起作用

Springmvc中配置Quartz使用,实现任务实时调度。

如何为 Quartz 调度程序设置 HSQLDB 模式

如果应用程序停止,quartz 调度程序获取下一个调度程序时间