一步后弹簧批流/分流

lul*_*ulu 7 java concurrency spring spring-batch

我正在构建一个包含以下过程的弹簧批处理解决方案:

步骤1:将列表拆分为多个列表步骤2:处理每个子列表步骤3:合并子列表

生成的子列表可以并行处理,并且根据spring-batch文档支持.遗憾的是,我只能找到以并行步骤开始的弹出批处理示例作业,而不是按顺序开始的示例.

以下作业无法编译.Spring给了我一个错误:'无法解决step2'

<batch:job id="webServiceJob2">
    <batch:step id="step1" next="step2"></batch:step>
    <batch:split id="step2" next="step3"></batch:split>
    <batch:step id="step3"></batch:step>
</batch:job>
Run Code Online (Sandbox Code Playgroud)

那么,如何将作业配置为首先运行单个步骤,而不是并行运行多个步骤,然后运行最后一个步骤?

Pab*_*ano 5

我偶然发现了这个问题,询问 split 是如何工作的,也许这个答案来得有点晚(一年),但我在这里......

问题是“分割”本身并不是一个步骤,但您是按原样命名(和引用)它的:

<batch:job id="webServiceJob2">
    <batch:step id="step1" next="step2"></batch:step>
    <batch:split id="step2" next="step3"></batch:split> <!-- This is not a step -->
    <batch:step id="step3"></batch:step>
</batch:job>
Run Code Online (Sandbox Code Playgroud)

正确的语法是:

<batch:job id="webServiceJob2">
    <batch:step id="step1" next="split_step2"></batch:step>
    <batch:split id="split_step2" next="step3">
        <flow> 
             <step id="step2_A_1" ... next="step2_A_2"/>
             <step id="step2_A_2" ... />
        </flow>
        <flow> 
             <step id="step2_B_1" ... />
        </flow>
    </batch:split>
    <batch:step id="step3"></batch:step>
</batch:job>
Run Code Online (Sandbox Code Playgroud)

但这不是您想要实现的目标,因为通过split声明,您必须在编译时设置将执行的并行步骤的确切数量,而 split 的目的是在每个流程中使用不同的步骤,而不是多次调用相同的步骤。

您应该检查有关缩放和并行进程的文档,分区步骤似乎很适合您的要求。