我正在从事一个项目,该项目每天最多可以使Google API命中1万5千次。因此,我想在15k之后停止工作,并在第二天恢复工作。请让我知道我该怎么做。
请让我知道如何实现相同的目标。现在,我正在考虑使用石英计划程序每天安排工作。
如果有人需要完整的解释,我可以进一步解释。
谢谢。
答案 0 :(得分:1)
您可以使用StepExecution#setTerminateOnly
停止执行步骤(及其周围的工作)。因此,根据您的情况,您可以使用ItemReadListener#afterRead
或ItemWriteListener#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的可能性很小,但它是最后一项,因此即使没有其他要处理的作业,也要在第二天再次安排该作业。没关系-作业将在第二天开始,并以正常的完整状态立即停止,因此调度程序将不再进行调度。