【问题标题】:How to update Spring Batch status on unexpected shutdown如何在意外关闭时更新 Spring Batch 状态
【发布时间】:2021-09-11 02:52:21
【问题描述】:
我正在实施一项服务,如果现有作业正在运行,该服务将拒绝处理作业请求。不幸的是,我不确定是否有办法区分正在运行的作业和由于意外关闭(如关闭 Tomcat)而结束的作业。表中的状态与 status = STARTED 和 exit_code = UNKNOWN 相同。
Set<JobExecution> jobExecutions = jobExplorer.findRunningJobExecutions("MY_JOB");
有没有办法将这两者区分开来或实现将活动作业状态更改为可能已放弃?
【问题讨论】:
标签:
spring
spring-batch
jobs
【解决方案1】:
确实无法仅通过查看数据库来区分有效运行的作业和已突然终止的作业(在这两种情况下,状态都是STARTED)。
您需要做的是,除了检查数据库中的状态之外,找到一种方法来查看作业是否有效运行。这实际上取决于您如何运行您的工作。例如,如果您在单独的 JVM 中运行作业,则可以编写一些代码来检查当前是否有 JVM 正在运行您的作业。如果您将作业部署到 Kubernetes,您可以询问 Kubernetes 当前是否有 pod 正在运行您的作业等。
但是,如果您可以识别出状态一直停留在 STARTED 的突然停止的执行(因为 Spring Batch 没有机会通过正常关闭将其状态更新为 FAILED),然后您可以手动将状态更新为ABONDONED 并将其END_TIME 设置为非空值。这样,JobExplorer#findRunningExecutions 将不再将其作为正在运行的执行返回。