我有一套带有一系列步骤的弹簧批处理作业。
如果某个步骤由于异常或停止而失败,我有两种方法可以重新启动它:
1)JobOperator.restartJob(long executionId) - 按exectution id重新启动
2)从数据库中读取失败的JobExecution并调用Job.execute(JobExecution execution)
第一种方法将创建JobExecution的副本并使用方法Job.execute(JobExecution execution)运行它。这种方式没有 如果可重新启动的属性为“false”,则重新运行已完成的步骤。这对我来说是理想的行为,但这种方式存在问题 是因为我有大量的执行上下文,反序列化它的速度并不快。
第二种方法只是重新运行现有的JobExecution实例。此外,它将重新运行所有已完成的步骤,即使它们已重新启动 财产“虚假”。这让我感到困惑,因为我只想继续执行未完成步骤的任务。
你能解释一下我应该用什么方式?