无法在Spring BatchJob中存储和检索从一个步骤到另一个步骤的数据

时间:2013-01-22 07:54:02

标签: spring batch-processing spring-batch

我们正在开发一个Spring Batch Job,我们需要在一个步骤中存储数据并在下一步中检索它。

我可以使用弹簧批处理源中的以下实现以独立方式实现此目的

http://static.springsource.org/spring-batch/reference/html/patterns.html#passingDataToFutureSteps

但我们正在以CLIENT / MASTER和SERVER方式实现它。 CLIENT / MASTER具有与作业和分区相关的代码。

客户端位于EAR旁边,Shell脚本使用它来调用批处理作业。

客户端的Bean配置:                                                                                                     

<job id="esk956" xmlns="http://www.springframework.org/schema/batch">
    <step id="importSalesAlert-master">
        <partition handler="partitionHandler" partitioner="partitioner" />
    </step>

</job>

<bean id="partitioner"
    class="org.springframework.batch.core.partition.support.SimplePartitioner" />

所有与步骤及其实现相关的代码(读者,处理器和  作家)在SERVER / SLAVE一侧。

SLAVE CODE:     

<step id="importSalesAlert" xmlns="http://www.springframework.org/schema/batch">
    <tasklet transaction-manager="transactionManager">
        <chunk reader="salesAlertFileItemReader" processor="nucleusItemProcessor"
            writer="nucleusItemWriter" commit-interval="10" />
        <listeners>
            <listener ref="loggingStepListener" />
        </listeners>
    </tasklet>
</step>

我们使用JMS集成和Weblogic作为网络服务器。

请指导我们解决问题。

1 个答案:

答案 0 :(得分:1)

将信息从分区程序传递给执行程序(步骤),您可以在分区时在stepExecutionContext中设置它,然后使用后期绑定来设置值。看看这里的例子(https://github.com/SpringSource/spring-batch/blob/master/spring-batch-samples/src/main/resources/jobs/partitionJdbcJob.xml),特别注意价值itemReader中的${stepExecutionContext[minValue]}。此值来自分区程序设置的stepExecutionContext。

您也可以以相同的方式访问其他后期绑定变量,就像jobExecutionContext和jobParameters一样。只需确保您的itemreader在其根元素中具有属性scope="step",并且您要么使用命名空间来声明jobRepository <batch:job-repository.../>,要么声明<bean class="org.springframework.batch.core.scope.StepScope" /> bean(但不包含两者)。请参阅此处(http://static.springsource.org/spring-batch/reference/html-single/index.html#step-scope)了解更多信息。