首页 文章

Spring Batch,通过作业的步骤变量

提问于
浏览
0

我正在尝试在Spring Batch中创建一个工作,但我找不到任何东西..我的程序看起来像这样:

  • 一个创建id列表的tasklet

  • 使用此列表在数据库中获取字符串并连接它们的Reader

  • 一个获取此String并将其写入文件的Writer

  • 使用id列表并更新数据库的tasket .

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

主要问题是我不知道如何在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更新?

1 回答

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

    }

    内部第二个tasklet:

    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" >
    

相关问题