【问题标题】:Quartz scheduler - synchronizing jobsQuartz 调度器 - 同步作业
【发布时间】: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


【解决方案1】:

您可以定义一个静态变量来标记 Job1 是否完成。当您创建 Job2 时,在您的代码中,您可以在执行前检查静态变量。

【讨论】:

    【解决方案2】:

    通过此调用检查现有正在运行的作业的详细信息并采取适当的措施..

    JobDetail jobDetail = scheduler.getJobDetail(jobKey);
    

    参考这个Jobs status

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多