首页 > 解决方案 > 继续春季批处理作业的正确方法

问题描述

我有一个带有一组步骤的春季批处理作业。

如果某个步骤由于异常而失败或被停止,我有两种可能的方法来重新启动它:

1) JobOperator.restartJob(long executionId) - 通过执行id重启

2) 从数据库中读取失败的 JobExecution 并调用 Job.execute(JobExecution execution)

第一种方法将创建 JobExecution 的副本并使用方法 Job.execute(JobExecution execution) 运行它。如果它们具有可重新启动的属性“false”,则这种方式不会重新运行已完成的步骤。这对我来说是可取的行为,但这种方式的问题是我有大量的执行上下文副本,并且反序列化它的速度不是那么快。

第二种方式只会重新运行现有的 JobExecution 实例。此外,即使它们具有可重新启动的属性“false”,它也会重新运行所有已完成的步骤。这让我很困惑,因为我只想为未完成的步骤继续执行任务。

你能解释一下我应该用什么方法吗?

标签: javaspringspring-batch

解决方案


推荐阅读