1

当 BJ 当前处于 RUNNING 状态,如果服务器 STOPPED,则 Spring Batch Admin 中的 BATCH JOB 状态即使在服务器停止后仍显示为 RUNNING,需要 FAILED

请帮忙解决这个问题?我们是否需要手动处理它,或者我们可以开箱即用地实现它。需要帮助吗?

4

1 回答 1

1

作业存储库(数据库实现)反映了最后一个“已知”状态。因此,在作业正在运行并且 JVM 崩溃的情况下,它将永远不会在数据库中更新。

如果数据库与 JVM “不同步”,则该过程需要手动进行,似乎没有现成的解决方案。最简单的解决方案是在启动时执行一个脚本,检查批处理表是否有任何正在运行的作业,然后“失败”它们。

update batch_job_execution set STATUS = 'FAILED', EXIT_CODE = 'FAILED', EXIT_MESSAGE = 'FORCED UPDATE' where job_execution_id in (select job_execution_id from batch_job_execution where status = 'RUNNING');

在这种情况下,您需要考虑的一件事是 JobRepository 表以及与之关联的作业是否与另一个 JVM 共享。在这种情况下,您可能希望执行一次传递,该传递还评估作业是否仍在运行,超过了它所拥有的任何历史记录的最大运行时间。(带有 max() end_time 的子选择 - 相同 job_name 的 create_time)

于 2013-06-27T18:34:13.573 回答