从 Parent 继承Step

如果一组Steps共享类似的配置,那么定义一个 “父级”Step从中得到混凝土Steps可以继承属性。与 class 相似 继承,即 “child”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属性在 job 元素中的步骤中仍然是必需的。这是两个人 原因:spring-doc.cadn.net.cn

  • id用作步骤名称,当保留StepExecution.如果相同 独立步骤在作业的多个步骤中引用,则会发生错误。spring-doc.cadn.net.cn

抽象Step

有时,可能需要定义父级Step那不是一个完整的Step配置。例如,如果reader,writertaskletattributes 是 从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/>元素中, child's 列表将覆盖 parent's 列表。允许子项添加其他 listeners 添加到父级定义的 list 中,每个 list 元素都有一个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>