如何在弹出批处理作业的下一步中获取上一步执行的ID?
我目前正在尝试对一组数据执行几个步骤,并将它们保存在数据库的不同行中。
每个步骤(第一步除外)都将读取前面的步骤结果并对其进行进一步处理,然后将更新的结果保存到新行中。
我有一个从数据库读取的自定义阅读器,但我需要将上一步执行的ID传递给当前步骤,以便它可以相应地查询存储库。
我该怎么做呢?
答案 0 :(得分:1)
请按照以下步骤操作:
1.从当前步骤开始,将数据传递给StepExecutionContext
。
2.从当前StepExecutionContext
开始,将数据传递到JobExecutionContext
(通过listener
)
3. JobExecutionContext
在所有步骤中共享,通过这种方式,您现在可以获取之前Steps
的数据。
替代方法是将此临时步骤数据存储在数据库中的表中,其中列为JobExecutionId,StepExecutionId,StepData
答案 1 :(得分:0)
一个选项是使用在执行步骤之前和之后调用的StepExecutionListener
。
方法afterStep
具有StepExecution
对象。您可以使用此StepExecution
设置下一步所需的所有参数。
例:
currentStep.registerStepExecutionListener(new StepExecutionListener() {
@Override
public void beforeStep(StepExecution stepExecution) {}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
nextStep.setParameter(stepExecution.getExecutionContext().getString(param)
return ExitStatus.COMPLETED;
}
});