【发布时间】:2018-10-08 09:24:24
【问题描述】:
我使用 Quartz 调度程序来执行 10 个作业。所有这些工作都有自己的触发器。所以它们是异步执行的。
但是现在我需要以更具体的方式执行其中的 2 个作业。假设 Job1 每偶数分钟执行一次,Job2 每奇数分钟执行一次。现在我希望 Job2 等待 Job1 完成。 示例:Job1 在 10:02 开始执行。在 10:03,Job2 的触发器被触发。但是在 Job2 开始执行之前,它会查看 Job1 是否已经完成。
我为实现 Job 接口的作业类找到了注释 @DisallowConcurrentExecution。我认为这可以解决问题,但后来我读到它只会禁止同时执行具有相同 JobKey(name,group) 的作业。但是我的工作不能使用相同的 JobKey。所以我猜这个注释只适用于一项工作。
您知道如何解决我的问题吗?非常感谢。
【问题讨论】:
-
如果您需要同步作业执行,那么您最好使用所谓的作业链,您可以在其中指定源作业和要执行的目标作业列表(立即,固定后延迟,或在计算的时间)源作业完成执行时。您可以将代码中的作业链接逻辑完全外部化,并避免在代码中使用各种同步器/障碍等。如果您认为此解决方案对您的情况有意义,我可以详细说明并提供更多详细信息。
标签: java quartz-scheduler