我有不同的工作,需要从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
上如何在不同作业之间共享父级的公共分割?或者我们如何使用独立的分割元素(如步元素)?
答案 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