从父母那里继承步
如果一组步骤如果配置相似,那么定义一个“父”步从中步骤可以继承属性。类似于类Java中的继承,“子”步将其元素和属性与父的结合。子节点还覆盖任一父节点步骤.
在以下示例中,步,具体步骤1,继承于parentstep. 是的 实例化为itemReader,itemProcessor,itemWriter,startLimit=5和允许StartIfComplete=true。. 此外,提交间隔是5,因为被 覆盖具体步骤1 步,如下示例所示:
<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>
这身份证属性仍然需要在作业元素中的步骤中。这是针对两个 原因:
-
这
身份证当坚持 时,将 作为步长名步执行. 如果作业中引用相同的独立步骤,则会发生错误。
-
在创建工作流时,正如本章后面所述,
下一个属性 应该指流程中的步骤,而不是独立步骤。
抽象步
有时,可能需要定义父体步这不是完备的步配置。 例如,如果读者,作家和任务小属性为从a中省略步配置,则初始化失败。如果父节点必须是定义时没有一个或多个这些属性,则抽象属性应该被使用。 一抽象 步只是扩展,从不实例化。
在以下示例中,步 (摘要ParentStep如果没有被声明为抽象,则不会被实例化。 这步, (concreteStep2) 具有itemReader,itemWriter和提交间隔=10.
<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>
合并列表
一些可配置元素步骤是列表,例如<听众/>元素。 如果父母和孩子都一样步骤声明a<听众/>元素,其中子节点的列表覆盖父节点的列表。为了允许子节点添加额外的监听器到 父节点定义的列表,每个列表元素都有一个合并属性。 如果该元素指定了merge=“true”,然后子节点的列表与父列表合并,而不是覆盖它。
在以下示例中,步“concreteStep3” 是用两个监听器创建的:听众一号和听众二号:
<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>