0

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

我可以使用spring批处理源中的以下实现以独立的方式实现这一点

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 端。

奴隶代码:

<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 作为网络服务器。

请指导我们解决问题。

4

1 回答 1

1

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

您还可以以相同的方式访问其他后期绑定变量,就像 jobExecutionContext 和 jobParameters 一样。只需确保您的 itemreaderscope="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)。

于 2013-01-22T12:08:05.793 回答