繁体   English   中英

Spring Batch,在工作步骤中可变

[英]Spring Batch, variable through the steps of a job

我正在尝试在Spring Batch中创建工作,但找不到任何东西。我的程序如下所示:

  • 一个创建ID列表的Tasklet
  • 使用此列表在数据库中获取String并将其串联的Reader
  • 使用此String并将其写入文件的Writer
  • 使用ID列表并更新数据库的任务集。

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

主要的问题是我不知道如何在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中检索它。 请参见下面的代码:

在第一个小任务内

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);

 }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM