2013-06-27 76 views
1

当BJ当前正在运行且服务器已停止时,即使在服务器停止后,Spring Batch Admin中的BATCH JOB状态仍会显示其RUNNING,它需要失败BatchJob - 服务器停止时BatchJob仍在运行

请帮忙吗?我们是否需要手动处理它,或者我们可以实现它的开箱即用。 需要帮助吗?

回答

1

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

如果数据库与JVM“不同步”,那么该过程需要是手动过程,但似乎并没有开箱即用的解决方案。最简单的解决方案是在启动时执行脚本,检查批处理表是否有任何RUNNING作业,然后“失败”。

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)

相关问题