当BJ当前正在运行且服务器处于STOPPED状态时,即使在服务器停止后,Spring Batch Admin中的BATCH JOB状态仍显示其RUNNING,它需要为FAILED
请帮帮忙吗?我们需要手动处理它还是我们可以开箱即用。 需要帮助吗?
答案 0 :(得分: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)