Java 如何做“;顺序”;作业调度(石英?)

Java 如何做“;顺序”;作业调度(石英?),java,scheduling,quartz-scheduler,Java,Scheduling,Quartz Scheduler,我正在利用石英调度和有2个工作。第一项工作是执行大约2分钟的任务,第二项工作是设置临时文件的清理操作。因此,我需要设置时间表,以便在执行第一项工作/完成执行任务后,我需要在第二项工作的帮助下进行清洁操作。 考虑到Quartz 2.1.x下的示例9-作业侦听器,该示例说明我们可以定义一个名为jobWasExecuted(u,u)的方法;在作业侦听器中,并在第一个作业执行/或处于运行状态时执行。 我们是否能够设置一个时间表,该时间表可以侦听第一个作业的完成,然后执行第二个作业?或 我们是否能够

我正在利用石英调度和有2个工作。第一项工作是执行大约2分钟的任务,第二项工作是设置临时文件的清理操作。因此,我需要设置时间表,以便在执行第一项工作/完成执行任务后,我需要在第二项工作的帮助下进行清洁操作。
考虑到Quartz 2.1.x下的示例9-作业侦听器,该示例说明我们可以定义一个名为jobWasExecuted(u,u)的方法;在作业侦听器中,并在第一个作业执行/或处于运行状态时执行。
我们是否能够设置一个时间表,该时间表可以侦听第一个作业的完成,然后执行第二个作业?或
我们是否能够像Java多线程处理一样定义join()方法,它可以在完成第一个作业时执行

目前没有“直接”或“自由”的方式来链接触发器 石英。但是,有几种方法可以不需要 非常努力。以下是几种方法的概述:

一种方法是使用监听器(即TriggerListener、JobListener或 SchedulerListener)可以通知作业/触发器的完成,以及 然后立即安排一个新的触发器点火。这种方法可以 有点牵扯,因为你必须告诉听众你的工作是什么 遵循这一点-您可能需要担心这种情况的持续性 信息

另一种方法是构建一个作业,该作业在其JobDataMap中包含要激发的下一个作业的名称,并在作业完成时(其Execute()方法的最后一步)让作业计划下一个作业。有几个人在做这件事,而且运气很好。大多数人都创建了一个基本(抽象)类,该类是一个作业,它知道如何使用特殊键(常量)从JobDataMap中获取作业名称和组,并包含调度已识别作业的代码。然后 他们只是对这个类进行扩展,包括附加的 这项工作应该做的工作


参考:?

我知道这是一个老问题,但还有两个选项可用于链接您的工作执行,人们会发现它们很有用:

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

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

来自

如何防止工作同时被解雇

Quartz.NET 2.x

实施IJob,并用 [DisallowConcurrentExecution]属性。阅读API文档 如需有关详细信息,请参阅DisallowConcurrentExecutionAttribute


注释在Java实现中可用。

谢谢Vishal,作业链接似乎正是我所需要的。