1

问题是关于批处理作业的自动恢复策略。当有多个作业正在运行(状态为“STARTED”且结束时间为空)时,说服务器由于未知原因而关闭。当我们再次启动服务器时,我们如何才能恢复所有这些工作。

在我的情况下,我编写了自己的作业启动器来接收请求并将它们保存到数据库队列中。然后我运行自己的作业调度程序来轮询来自数据库的请求并执行作业。为了将这些作业的状态从“STARTED”更改为“STARTING”以便我的调度程序再次接收,我当前的尝试包含:

  1. 因为spring batch无法重启“STARTED”作业,甚至job是可重启的,spring batch会在同一个job实例下创建一个新的job执行。因此,如果我可以重新启动作业,则需要更改原始作业 ID。但是我们尝试使用作业运算符以“已启动”状态停止作业,然后再次重新启动它,但失败了。为什么这不起作用?

    jobOperator.stop(jobId); jobOperator.restart(jobId);

  2. 我也未能使用作业存储库将作业执行状态从“STARTED”更新为“STARTING”。

    jobExecution.setStatus(BatchStatus.STARTED); jobRepository.update(jobExecution);

任何实现这一目标的想法将不胜感激!

4

2 回答 2

1

您需要将状态修复为FAILED才能重新启动作业。

于 2014-08-26T12:32:52.627 回答
0

目前使用春季批处理版本 3.0.8.RELEASE 我设法通过在重新启动之前设置 END_TIME 来重新启动此类作业。

 jobExecution.setEndTime(new Date());jobRepository.update(execution);

当您研究

org.springframework.batch.core.JobExecution.isRunning()
于 2017-10-18T09:00:05.683 回答