如何在弹出批处理作业的下一步中获取上一步执行的ID?

时间:2016-05-20 15:28:33

标签: java spring batch-processing

如何在弹出批处理作业的下一步中获取上一步执行的ID?

我目前正在尝试对一组数据执行几个步骤,并将它们保存在数据库的不同行中。

每个步骤(第一步除外)都将读取前面的步骤结果并对其进行进一步处理,然后将更新的结果保存到新行中。

我有一个从数据库读取的自定义阅读器,但我需要将上一步执行的ID传递给当前步骤,以便它可以相应地查询存储库。

我该怎么做呢?

2 个答案:

答案 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;
        }
    });