如何做“顺序”作业调度(Quartz?)

我正在使用Quartz Scheduling,有2个工作。 第一个作业执行约2分钟的任务,第二个作业是为临时文件的清理操作设置。 所以,我需要设置Schedule以一种方式工作,即在第一个作业执行/完成执行任务后,我需要在Second Job的帮助下完成清理操作。
考虑示例9 – Quartz 2.1.x下的Job Listeners,它声明我们可以定义一个名为jobWasExecuted(_,_)的方法; 在Job Listener中,它在第一个作业执行/或进入运行状态时执行。
我们是否能够设置可以监听第一个作业然后执行第二个作业的计划? 要么,
我们是否能够像在Javamultithreading中那样定义join()方法,它可以在完成第一个作业时执行?

目前没有“直接”或“免费”的方式来链接触发器与Quartz。 但是,有几种方法可以毫不费力地完成它。 以下是几种方法的概述:

一种方法是使用一个侦听器(即TriggerListener,JobListener或SchedulerListener),它可以注意到作业/触发器的完成,然后立即安排新触发器触发。 这种方法可能会涉及到一些问题,因为您必须告知监听器哪个作业遵循哪个 – 您可能需要担心此信息的持久性。

另一种方法是构建一个Job,它在JobDataMap中包含要触发的下一个作业的名称,并且当作业完成时(其Execute()方法的最后一步)将作业调度到下一个作业。 有几个人这样做,并且运气好。 大多数人都创建了一个基类(抽象)类,它是一个知道如何使用特殊键(常量)从JobDataMap中获取作业名称和组的Job,并包含用于调度已识别作业的代码。 然后他们只是扩展这个类,其中包括作业应该做的额外工作。

参考: http : //www.quartz-scheduler.net/documentation/faq.html#how-do-i-chain-job-execution ? – or,-how-do-i-create-a- workflow ?

我知道这是一个古老的问题,但是还有2个选项可用于链接人们可以发现有用的工作执行:

1)使用自早期版本以来标准Quartz发行版中包含的JobChainingJobListener 。 此侦听器允许您使用其addJobChainLink方法以编程方式定义简单作业链。

2)使用QuartzDesk等商业解决方案,我是其主要开发者。 QuartzDesk包含一个强大的作业链引擎,允许您从应用程序代码外部化作业链的定义,并使您能够在运行时通过GUI更新作业链,而无需修改,重新部署和重新启动应用程序。 作业链可以与特定作业,触发器相关联,也可以是任何作业执行时执行的全局作业链(对全局作业执行失败处理程序等有用)。

QuartzDesk GUI:编辑工作链目标

来自http://www.quartz-scheduler.net/documentation/faq.html#how-do-i-chain-job-execution?-or,-how-do-i-create-a-workflow

如何让作业同时发射?

Quartz.NET 2.x

实现IJob并使用[DisallowConcurrentExecution]属性装饰您的作业类。 有关详细信息,请阅读DisallowConcurrentExecutionAttribute的API文档。

注释在Java实现中可用。