Quartz Jobs依赖项

问题描述 投票:5回答:1

我正在使用Quartz进行项目,并且一直存在作业依赖关系的问题。

我们有一个设置,其中A和B彼此不依赖,尽管C是:

A和B可以同时运行,但是C只能在A和B都完成时运行。

是否有办法在Quartz中设置这种情况,以便C仅在A和B完成时才触发?

quartz-scheduler
1个回答
6
投票

我认为这是目前的做法:http://www.quartz-scheduler.org/documentation/faq#FAQ-chain

基于此常见问题解答,您可以创建一个作业侦听器,等待A和B完成,然后安排作业C一旦发生。

PS:以下是链接更改时的文字:

如何链接作业执行?或者,如何创建工作流程?

目前,尚无“直接”或“免费”方式来链接触发器石英。但是,有几种方法可以完成此任务而无需很大的努力。以下是几种方法的概述:

一种方法是使用侦听器(即TriggerListener,JobListener或SchedulerListener),可以注意到作业/触发器的完成,以及然后立即安排新的触发器触发。这种方法可以得到有点涉及,因为您必须通知听众哪个工作接下来-您可能需要担心它的持久性信息。见听众Quartz附带的org.quartz.listeners.JobChainingJobListener-因为它已经具有某些此功能。

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

将来,Quartz将提供一种更清洁的方式来实现此目的,但是在此之前,您必须使用上述方法之一,或者另一个更适合您的选项。

© www.soinside.com 2019 - 2024. All rights reserved.