<split>元素可能不会出现在<job>上,其中abstract =&#34; true&#34;春季批次</job> </split>

时间:2014-05-06 09:54:57

标签: java spring spring-batch

我有不同的工作,需要从parenet工作共享拆分(并行运行的多个步骤)。以下是配置

<job id="parentJob" abstract="true">

    <split id="split1" task-executor="asyncTaskExecutor">
        <flow>
            <step id="step0_1">
                <tasklet transaction-manager="transactionManager">
                    <chunk reader="step0_1ItemReader" writer="step0_1ItemWriter"
                        commit-interval="1000" />
                </tasklet>
            </step>
        </flow>
        <flow>
            <step id="step0_2">
                <tasklet transaction-manager="transactionManager">
                    <chunk reader="step0_2ItemReader" writer="step0_2ItemWriter"
                        commit-interval="1000" />
                </tasklet>
            </step>
        </flow>
        <flow>
            <step id="step0_3">
                <tasklet transaction-manager="transactionManager">
                    <chunk reader="step0_2ItemReader" writer="step0_2ItemWriter"
                        commit-interval="1000" />
                </tasklet>
            </step>
        </flow>

    </split>

</job>


<job id="job1" parent="parentJob">
    <step id="step1_1" next="split1">
        <tasklet ref="step1_1Tasklet" />
    </step>
</job>




<job id="job2" parent="parentJob">
    <step id="step2_1" next="split1">
        <tasklet ref="step2_1Tasklet" />
    </step>
</job>

我收到此错误

该元素可能不会出现在with abstract =“true”spring batch

如何在不同作业之间共享父级的公共分割?或者我们如何使用独立的分割元素(如步元素)?

1 个答案:

答案 0 :(得分:2)

<split/>元素类似于Spring Batch中的一个步骤。虽然这不是一个步骤,但它是一个批处理作业的状态。在Spring Batch中,状态不可继承,因为无法知道订单是什么。如果jobA中有一个分裂而jobB有三个步骤并且继承了jobA,那么分割会在哪里进行?一开始?最后?

处理这种常见流程的最佳方法是外部化流程并从作业中引用它。例如(此示例包含带有步骤的流,但它也可以包含拆分):

<job id="job">
    <flow id="job1.flow1" parent="flow1" next="step3"/>
    <step id="step3" parent="s3"/>
</job>

<flow id="flow1">
    <split id="split1">
        <flow>
            <step id="step1" parent="s1" next="step2"/>
            <step id="step2" parent="s2"/>
        </flow>
        <flow>
            <step id="step3" parent="s3"/>
        </flow>
    </split>
</flow>

您可以在此处的文档中阅读有关外部化流程的更多信息:http://docs.spring.io/spring-batch/reference/html-single/index.html#external-flows