Spring 批处理,通过作业的步骤可变

Spring Batch, variable through the steps of a job

我正在尝试在 Spring 批处理中创建工作,但我找不到任何东西。我的程序看起来像这样:

首先,它是我批次结构的最佳选择吗?

主要问题是我不知道如何在Reader 和最后一个Tasklet 中获取id 列表。我正在使用 Spring 并且我试过这个:

    <bean id="idList" class="java.util.ArrayList" scope="job" />

    <bean id="myFirstTasklet" class="myFirstTasklet"
        <property name="idList" ref="idList" />
    </bean>

    <bean id="myReader" class="myReader"
        <property name="idList" ref="idList" />
    </bean>

    <bean id="mySecondTasklet" class="mySecondTasklet"
        <property name="idList" ref="idList" />
    </bean>

在创建 Reader 和第二个 tasklet 之前,tasklet 可以更新我的列表吗?

您可以将值放在tasklet 的ExecutionContext 中,然后在其他tasklet 中检索它。请看下面的代码:

在第一个 tasklet 中-

public RepeatStatus execute(StepContribution stepContribution,
        ChunkContext chunkContext) throws Exception {

//Putting value in Execution Context
chunkContext.getStepContext().getStepExecution().getJobExecution()
            .getExecutionContext()
            .put(Constants.DATA_LIST, idList);

}

在第二个小任务中:

public RepeatStatus execute(StepContribution contribution,
        ChunkContext chunkContext) throws Exception {

//Retrieving value from Execution context
(ArrayList) chunkContext.getStepContext()
            .getStepExecution().getJobExecution().getExecutionContext()
            .get(Constants.DATA_LIST);

 }

同时确保将 tasklet 的范围标记为步骤:

<bean id="mySecondTasklet" class="mySecondTasklet" scope="step" >