【问题标题】:quartz-scheduler depend jobs石英调度程序依赖工作
【发布时间】:2013-07-18 11:23:57
【问题描述】:

我正在使用 Quartz 进行一个项目,并且在作业的依赖项方面遇到了问题。

我们有一个设置,其中 A 和 B 不相互依赖,但 C 是:

A 和 B 可以同时运行,但 C 只能在 A 和 B 都完成的情况下运行。

有没有办法在 Quartz 中设置这种场景,让 C 只在 A 和 B 完成时触发?

【问题讨论】:

    标签: quartz-scheduler


    【解决方案1】:

    不直接 AFAIK,但使用 TriggerListener 来实现这样的功能应该不会太难(TriggerListener 在作业的开始和结束时运行,您可以为单个触发器或触发器组设置它们)。

    编辑:关于这个问题甚至有一个特定的FAQ Topic

    目前没有“直接”或“免费”的方式来链接触发器 石英。但是,有几种方法可以在没有的情况下完成它 很多努力。以下是几种方法的概述:

    一种方法是使用监听器(即 TriggerListener、JobListener 或 SchedulerListener) 可以注意到作业/触发器的完成和 然后立即安排一个新的触发器触发。这种方法可以得到 有点涉及,因为您必须告知听众哪个工作 紧随其后-您可能需要担心这种情况的持久性 信息。见听者 Quartz 附带的 org.quartz.listeners.JobChainingJobListener - 因为它已经具备了一些这样的功能。

    另一种方法是构建一个 Job,在其 JobDataMap 中包含 下一个要触发的作业的名称,以及作业完成时(最后一步 在其 execute() 方法中)让作业安排下一个作业。一些 人们正在这样做并且有好运。大多数人已经建立了基础 (抽象)类,它是一个知道如何获取作业名称和 使用预定义的键(常量)和 包含安排已识别作业的代码。这个抽象的工作 execute() 的实现委托给抽象模板方法 例如“doWork()”(扩展 Job 类的实际工作所在) 然后它包含用于安排后续作业的代码。然后 他们只是对这个类进行扩展,其中包括工作 工作应该做。使用“持久”工作,或超载 addJob(JobDetail, boolean, boolean) 方法(在 Quartz 2.2 中添加)有帮助 应用程序使用适当的数据一次定义所有作业, 尚未创建触发器来触发它们(除了一个触发器 解雇链中的第一个工作)。

    在未来,Quartz 将提供一种更简洁的方式来执行此操作,但 在那之前,您将不得不使用上述方法之一,或者认为 另一个更适合您的。

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多