当前位置: 首页 > 知识库问答 >
问题:

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

段干俊茂
2023-03-14

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

共有1个答案

南宫博简
2023-03-14

目前没有“直接”或“免费”的方式与石英链触发器。然而,有几种方法您可以完成它不需要太多的努力。以下是几种方法的概要:

一种方法是使用监听器(即TriggerListener、JobListener或SchedulerListener),该监听器可以注意到作业/触发器的完成,然后立即调度新触发器来激发。这种方法可能会涉及到一点,因为您必须通知侦听器哪个作业在哪个作业之后--而且您可能需要担心这些信息的持久性。

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

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

 类似资料:
  • 问题内容: 我正在使用“石英计划”,并且有2个工作。第一项作业将执行大约2分钟的任务,第二项作业将被设置为清理临时文件。因此,我需要设置计划表,使其工作方式如下:在执行完第一项任务/完成任务后,我需要在第二项任务的帮助下进行清洁操作。 考虑示例9-Quartz 2.1.x下的作业侦听器,它声明我们可以定义一个名为jobWasExecuted(,)的方法;在Job Listener中,它在第一个作业

  • 假设我在Hadoop环境中资源有限,我不想安排长时间运行的作业(即需要几天时间才能完成)。我正在分析大量过去的时间序列数据。我想安排一次需要一天数据的mapreduce作业(这需要一个小时来处理)。 那么,我如何安排,使新的工作提交后,前一个工作完成?

  • 我有以下触发器配置: 我的工作可能超过5秒。 可行吗? 谢谢

  • 我正在使用Quartz调度器,但我不知道如何并行运行作业。配置文件中有什么东西可以允许我这样做吗?

  • 我是hadoop新手,我写了一些作业并将它们导出为jar文件。我可以使用hadoop jar命令运行它们,我想每一小时运行一次这些作业。我该怎么做?提前谢谢。

  • 我有两个要求。 每周一触发作业 对于第一个要求,我尝试了和。他们俩都不工作。该函数未被调用。 对于第二个要求,我尝试了和。我得到下面的错误。 原因:java。lang.IllegalStateException:遇到无效的@Scheduled方法“monthlyData”:用于输入字符串:“2#1”。