停止后是否可以重新启动作业?

时间:2019-01-14 17:48:07

标签: java spring-boot spring-batch

我正在从事一个项目,该项目每天最多可以使Google API命中1万5千次。因此,我想在15k之后停止工作,并在第二天恢复工作。请让我知道我该怎么做。

请让我知道如何实现相同的目标。现在,我正在考虑使用石英计划程序每天安排工作。

如果有人需要完整的解释,我可以进一步解释。

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用StepExecution#setTerminateOnly停止执行步骤(及其周围的工作)。因此,根据您的情况,您可以使用ItemReadListener#afterReadItemWriteListener#afterWrite来访问步骤执行,并在处理15k项后设置terminateOnly标志。当您这样优雅地停止作业时,其状态将为STOPPED,并且您将能够在第二天再次提到它。

您可以在参考文档的Stopping a Job Manually for Business Reasons部分中找到示例。

希望这会有所帮助。

答案 1 :(得分:0)

我遇到了类似的事情,我需要在计划开始进行服务器维护之前5分钟停止24/7作业。

我发现最简单的方法是使用Reader并返回null以指示作业应停止。在您的情况下,当处理15k API请求时,返回null。

这可能意味着您将需要一个可供读取器使用并由处理器更新的bean(可能只是AtomicInteger)。但是还有一个也了解该bean的Job Listener(对不起,我没有代码)。如果达到最大值,则Listener sets up a custom job exit value将在作业停止时返回到调度程序。调度程序必须具有足够的可配置性,以了解特定的退出值意味着第二天再次开始作业。 (任何其他非零值都被视为错误。)

这意味着作业达到15k的可能性很小,但它是最后一项,因此即使没有其他要处理的作业,也要在第二天再次安排该作业。没关系-作业将在第二天开始,并以正常的完整状态立即停止,因此调度程序将不再进行调度。