从 Parent 继承Step
如果一组Steps
共享类似的配置,那么定义一个
“父级”Step
从中得到混凝土Steps
可以继承属性。与 class 相似
继承,即 “child”Step
将其元素和属性与
父级的。子对象还会覆盖父对象的任何Steps
.
在以下示例中,Step
,concreteStep1
继承自parentStep
.是的
实例化itemReader
,itemProcessor
,itemWriter
,startLimit=5
和allowStartIfComplete=true
.此外,commitInterval
是5
,因为它是
被concreteStep1
Step
,如下例所示:
<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 元素中的步骤中仍然是必需的。这是两个人
原因:
-
这
id
用作步骤名称,当保留StepExecution
.如果相同 独立步骤在作业的多个步骤中引用,则会发生错误。
-
在创建任务流时,如本章后面所述,
next
属性 应引用流程中的步骤,而不是独立步骤。
抽象Step
有时,可能需要定义父级Step
那不是一个完整的Step
配置。例如,如果reader
,writer
和tasklet
attributes 是
从Step
配置,则初始化失败。如果父级必须
定义时,则abstract
属性。一abstract
Step
仅扩展,从不实例化。
在以下示例中,Step
(abstractParentStep
) 不会被实例化,如果它
没有被宣布为抽象的。这Step
, (concreteStep2
) 具有itemReader
,itemWriter
和commit-interval=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>
合并列表
上的一些可配置元素Steps
是列表,例如<listeners/>
元素。
如果父级和子级Steps
声明一个<listeners/>
元素中,
child's 列表将覆盖 parent's 列表。允许子项添加其他
listeners 添加到父级定义的 list 中,每个 list 元素都有一个merge
属性。
如果元素指定merge="true"
,则子项的列表将与
parent's 而不是覆盖它。
在以下示例中,Step
“concreteStep3” 是使用两个侦听器创建的:listenerOne
和listenerTwo
:
<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>