当前位置: 首页 > 知识库问答 >
问题:

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

赫连琦
2023-03-14

我们正在处理一个Spring批处理作业,其中我们需要存储在一个步骤中计算的数据,并在下一个步骤中检索它。

我能够在Spring批处理源代码中使用以下实现以独立的方式实现这一点

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

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

客户端位于EAR之外,由Shell脚本用于调用Batch Jobs。

客户端的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" />

所有与步骤及其实现(读卡器、处理器和写入器)相关的代码都在服务器/从机端。

从代码:

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

请指导我们解决这个问题。

共有1个答案

巫马浩言
2023-03-14

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

您还可以以相同的方式访问其他后期绑定变量,就像jobExecutionContext和jobParameters一样。只需确保itemreader的根元素中有属性scope=“step”,并且使用名称空间声明jobRepository

 类似资料:
  • 我对Spring批处理框架相当陌生。 我在一个作业中创建了两个步骤(我们称之为步骤1和步骤2)。我想把它们并行运行。不仅如此,step2的IteamReader还应该使用step1的itemwriter。 我的第一个问题是,在Spring批量中是否有可能做到这一点?如果是,怎么做? 其次,如果这不可能,还有什么工作可以做呢? 谢了。

  • null 如果生成错误(文件不一致,文件不存在...),则不能执行 仅供参考,我使用的是没有XML配置的Spring批处理!只有注释:下面是我的作业配置类的样子:

  • 我设置了以下测试用例: 我想使用Groovy脚本测试步骤获得SoapRequest测试步骤的状态。 它可以如下所示完成: 但是我不想通过脚本运行TestStep,而只是使用soapui testrunner。在datasink测试步骤中,我可以使用这个: 不幸的是,上述方法在GroovyScript TestStep中不起作用 有什么想法吗?

  • 我想在每个步骤之前和之后执行一些操作(而不是场景)。用cucumber怎么做? 就像jUnit中的后和前。 **我正在使用java。

  • 问题内容: 我有一个宏,可以在给定的时间范围内将数据插入表中。 它遍历一系列从头到尾的日期(存储在数据集中),并使用proc sql insert语句运行宏。 在所有这些操作的最后检查数据时,我注意到新数据集中只有最后的起始至结束期间的数据。 这是在数据步骤中调用宏时的代码。 我还需要在数据步骤中调用其他方法,以便该方法可以工作,并为每个from-to周期(而不是最后一个周期)插入数据(运行宏)吗

  • 给定一个非负整数数组,您最初位于数组的第一个索引处。 数组中的每个元素表示该位置的最大跳跃长度。 您的目标是以最少的跳跃次数达到最后一个索引。 例如:给定数组 到达最后一个指数的最小跳跃次数为2次。(从索引0跳转1步到1,然后3步到最后一个索引。) 我已经从左到右构建了一个dp[]数组,以便dp[i]指示从arr[0]到达arr[i]所需的最小跳转次数。最后,我们返回dp[n-1]。 我的代码的最