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

How do I get the ID of the previous step execution in the next step of a spring batch job?

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

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

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

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

我该怎么做?

请按照以下步骤操作:

1.From 当前步骤,将数据传递给 StepExecutionContext.

2.From 当前 StepExecutionContext,将数据传递给 JobExecutionContext(通过 listener

3.JobExecutionContext 在所有步骤中共享,通过这种方式您现在可以获取先前 Steps.

的数据

另一种方法是将此临时 Step 数据存储在数据库中的 table 中,列为 JobExecutionId,StepExecutionId,StepData

一个选项是使用将在步骤执行前后调用的 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;
        }
    });