【发布时间】:2013-06-27 07:19:41
【问题描述】:
当 BJ 当前处于 RUNNING 状态且服务器已停止时,Spring Batch Admin 中的 BATCH JOB 状态即使在服务器停止后仍显示为 RUNNING,需要 FAILED
请帮忙?我们是否需要手动处理它,或者我们可以开箱即用地实现它。 需要这方面的帮助吗?
【问题讨论】:
标签: spring spring-batch spring-batch-admin
当 BJ 当前处于 RUNNING 状态且服务器已停止时,Spring Batch Admin 中的 BATCH JOB 状态即使在服务器停止后仍显示为 RUNNING,需要 FAILED
请帮忙?我们是否需要手动处理它,或者我们可以开箱即用地实现它。 需要这方面的帮助吗?
【问题讨论】:
标签: spring spring-batch spring-batch-admin
作业存储库(数据库实现)反映了最后一个“已知”状态。因此,在作业正在运行并且 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)
【讨论】: