问题在于批处理作业的自动恢复策略。 当有多个作业正在运行时(状态为“STARTED”和null结束时间),说服务器由于未知原因而关闭。当我们再次启动服务器时,我们如何恢复所有这些工作。
在我的情况下,我编写了自己的作业启动程序来接收请求并将它们保存到数据库队列中。然后我运行自己的作业调度程序来轮询来自数据库的请求并执行作业。 为了将这些作业的状态从“STARTED”更改为“STARTING”以便再次被我的调度程序选中,我当前的尝试包含:
因为spring批处理无法重启“STARTED”作业,即使作业可以重启,spring批处理也会在同一个作业实例下创建一个新的作业执行。因此,如果我可以重新启动作业,则需要更改原始作业ID。但我们尝试使用作业操作员以“STARTED”状态停止作业,然后再次重新启动它,我失败了。为什么这不起作用?
jobOperator.stop(的jobId); jobOperator.restart(的jobId);
我也无法使用作业存储库将作业执行状态从“STARTED”更新为“STARTING”。
jobExecution.setStatus(BatchStatus.STARTED); jobRepository.update(jobExecution);
任何实现这一目标的想法都将受到赞赏!
答案 0 :(得分:1)
您需要将状态修改为FAILED
才能重新启动作业。
答案 1 :(得分:0)
目前有春季批量版本3.0.8.RELEASE我设法通过在重启之前设置END_TIME来重启这样的作业。
jobExecution.setEndTime(new Date());jobRepository.update(execution);
当你研究
的实现时,这是有道理的org.springframework.batch.core.JobExecution.isRunning()