提问者:小点点

Spring批次,通过作业步骤进行可变


我正试图在SpringBatch中创建一个工作,但找不到什么。。我的程序如下:

  • 创建ID列表的tasklet
  • 使用此列表获取数据库中的字符串并将其连接起来的读取器
  • 获取此字符串并将其写入文件的Writer
  • 使用ID列表并更新数据库的任务集

第一,它是不是我这批的结构最好的选择?

主要问题是我不知道如何在阅读器和最后一个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>

在创建阅读器和第二个任务之前,我的列表可以由任务包更新吗?


共1个答案

匿名用户

您可以将该值放在 tasklet 的 ExecutionContext 中,然后在其他 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);

 }

还要确保将您的小任务的范围标记为step:

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