如何设置为一个 QUARTZ 作业,仅在另一个作业完成时才开始,停止?

2022-09-03 06:51:22

我有一个石英工作,每10分钟开始一次。

如果一个作业在 10 分钟内没有完成,在接下来的第 10 分钟内,另一个作业将启动。

我想要的是:如果上一个 JOB 已完成运行,则下一个 JOB(每 10 分钟之后)应仅启动。有什么办法可以做到这一点吗?


答案 1

石英文档

@DisallowConcurrentExecution是一个注释,可以添加到 Job 类中,告诉 Quartz 不要同时执行给定作业定义(引用给定作业类)的多个实例。请注意那里的措辞,因为它是非常仔细地选择的。在上一节的示例中,如果“SalesReportJob”具有此注释,则在给定时间只能执行“SalesReportForJoe”的一个实例,但它可以与“SalesReportForMike”的实例同时执行。约束基于实例定义 (JobDetail),而不是基于作业类的实例。但是,(在 Quartz 的设计过程中)决定将注释放在类本身上,因为它通常会对类的编码方式产生影响。

如果您不希望 SalesReportForMike 和 SalesReportForJoe 同时运行,则可以将调度程序的 ThreadPool 大小设置为 1。因此,在任何给定时间,都只会运行一个作业。

也看看StatefulJob


答案 2

查看 DisallowConcurrentExecution 注释,该注释将防止同一作业的多个实例同时运行。


推荐