我有一套带有一系列步骤的 spring 批处理作业 .

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

1)JobOperator.restartJob(long executionId) - 通过exectution id重新启动

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

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

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

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