此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Batch 文档 5.2.2spring-doc.cadn.net.cn

从父母那里继承Step

如果一组Steps共享类似的配置,那么定义一个 “父母”Step混凝土从中Steps可以继承属性。与class相似 Java 中的继承,“子”Step将其元素和属性与 父母的。子项还会覆盖父项的任何Steps.spring-doc.cadn.net.cn

在以下示例中,Step,concreteStep1,继承自parentStep.是的 实例化为itemReader,itemProcessor,itemWriter,startLimit=5allowStartIfComplete=true.此外,commitInterval5,因为它是 被concreteStep1 Step,如以下示例所示:spring-doc.cadn.net.cn

<step id="parentStep">
    <tasklet allow-start-if-complete="true">
        <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>
    </tasklet>
</step>

<step id="concreteStep1" parent="parentStep">
    <tasklet start-limit="5">
        <chunk processor="itemProcessor" commit-interval="5"/>
    </tasklet>
</step>

id属性仍然是作业元素内步骤上所必需的。这是两个人 原因:spring-doc.cadn.net.cn

  • id在持久化StepExecution.如果相同的 在作业中的多个步骤中引用独立步骤时,会发生错误。spring-doc.cadn.net.cn

抽象Step

有时,可能需要定义父级Step那不是完整的Step配置。例如,如果reader,writertasklet属性是 离开Step配置,则初始化失败。如果父级必须是 定义时,如果没有其中一个或多个属性,则abstract属性。一abstract Step只是扩展,从不实例化。spring-doc.cadn.net.cn

在以下示例中,Step (abstractParentStep)如果 没有被宣布为抽象的。这Step, (concreteStep2) 有itemReader,itemWritercommit-interval=10.spring-doc.cadn.net.cn

<step id="abstractParentStep" abstract="true">
    <tasklet>
        <chunk commit-interval="10"/>
    </tasklet>
</step>

<step id="concreteStep2" parent="abstractParentStep">
    <tasklet>
        <chunk reader="itemReader" writer="itemWriter"/>
    </tasklet>
</step>

合并列表

上的一些可配置元素Steps是列表,例如<listeners/>元素。 如果父级和子级Steps声明一个<listeners/>元素,则 子项的列表将覆盖父级的列表。允许孩子添加其他 监听器,每个列表元素都有一个merge属性。 如果元素指定merge="true",则子项的列表将与 parent's 而不是覆盖它。spring-doc.cadn.net.cn

在以下示例中,Step“concreteStep3”,使用两个监听器创建:listenerOnelistenerTwo:spring-doc.cadn.net.cn

<step id="listenersParentStep" abstract="true">
    <listeners>
        <listener ref="listenerOne"/>
    </listeners>
</step>

<step id="concreteStep3" parent="listenersParentStep">
    <tasklet>
        <chunk reader="itemReader" writer="itemWriter" commit-interval="5"/>
    </tasklet>
    <listeners merge="true">
        <listener ref="listenerTwo"/>
    </listeners>
</step>