此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Batch 文档 5.1.2spring-doc.cn

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Batch 文档 5.1.2spring-doc.cn

如果一组共享相似的配置,那么定义 具体代码可以从中继承属性的 “parent” 来继承属性。与 class 相似 继承,则 “child” 将其元素和属性与 父级的。子级还会覆盖父级的任何 .StepsStepStepsStepStepsspring-doc.cn

在以下示例中, , 继承自 。是的 使用 、 、 、 和 实例化。此外,是 ,因为它是 被 覆盖,如下例所示:StepconcreteStep1parentStepitemReaderitemProcessoritemWriterstartLimit=5allowStartIfComplete=truecommitInterval5concreteStep1Stepspring-doc.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>

该属性在 job 元素中的步骤中仍然是必需的。这是两个人 原因:idspring-doc.cn

  • 在保留 .如果相同 独立步骤在作业的多个步骤中引用,则会发生错误。idStepExecutionspring-doc.cn

  • 在创建任务流时,如本章后面所述,属性 应引用流程中的步骤,而不是独立步骤。nextspring-doc.cn

抽象Step

有时,可能需要定义一个不是完整配置的父级。例如,如果 、 和 属性是 离开配置,则初始化失败。如果父级必须 在没有这些属性中的一个或多个的情况下定义,则应使用该属性。An 仅扩展,从不实例化。StepStepreaderwritertaskletStepabstractabstractStepspring-doc.cn

在以下示例中,如果 () 如果 没有被宣布为抽象的。, () 有 、 和 。StepabstractParentStepStepconcreteStep2itemReaderitemWritercommit-interval=10spring-doc.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>

合并列表

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

在以下示例中,“concreteStep3”是使用两个侦听器创建的:和 :SteplistenerOnelistenerTwospring-doc.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>