从父级 Step 继承

如果一组 Steps 共享相似的配置,那么定义一个“父”Step 可能会很有帮助,具体的 Steps 可以从中继承属性。类似于 Java 中的类继承,“子”Step 将其元素和属性与父级的相结合。子级还会覆盖父级的任何 Stepsspring-doc.cadn.net.cn

在以下示例中,StepconcreteStep1 继承自 parentStep。它使用 itemReaderitemProcessoritemWriterstartLimit=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 元素内的 step 上仍然是必需的。这有两个原因:spring-doc.cadn.net.cn

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

摘要Step

有时,可能需要定义一个父Step,但它并非完整的Step配置。例如,如果在Step配置中省略了readerwritertasklet属性,则初始化会失败。如果必须定义缺少其中一个或多个这些属性的父节点,则应使用abstract属性。abstractStep仅被扩展,永远不会被实例化。spring-doc.cadn.net.cn

在以下示例中,如果未将 StepabstractParentStep)声明为抽象类,则其实例不会被创建。StepconcreteStep2)具有 itemReaderitemWritercommit-interval=10spring-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",则子元素的列表将与父元素的列表合并,而不是覆盖它。spring-doc.cadn.net.cn

在以下示例中,Step“concreteStep3spring-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>