親 Step
からの継承
Steps
のグループが同様の構成を共有している場合、具体的な Steps
がプロパティを継承できる「親」 Step
を定義すると役立つ場合があります。Java のクラス継承と同様に、「子」 Step
はその要素と属性を親のものと結合します。子は、親の Steps
もオーバーライドします。
次の例では、Step
、concreteStep1
は parentStep
から継承しています。itemReader
、itemProcessor
、itemWriter
、startLimit=5
、allowStartIfComplete=true
でインスタンス化されます。さらに、次の例に示すように、concreteStep1
Step
によってオーバーライドされるため、commitInterval
は 5
です。
<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
属性は、ジョブ要素内のステップで引き続き必要です。これには 2 つの理由があります。
id
は、StepExecution
を永続化する際のステップ名として使用されます。同じスタンドアロンステップがジョブの複数のステップで参照されている場合、エラーが発生します。
この章で後述するように、ジョブフローを作成する場合、
next
属性は、スタンドアロンステップではなく、フロー内のステップを参照する必要があります。
抽象 Step
完全な Step
構成ではない親 Step
を定義する必要がある場合があります。たとえば、reader
、writer
、tasklet
属性が Step
構成から除外されている場合、初期化は失敗します。これらのプロパティを 1 つ以上指定せずに親を定義する必要がある場合は、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/>
要素を宣言する場合、子のリストが親のリストをオーバーライドします。子が親によって定義されたリストに追加のリスナーを追加できるようにするために、すべてのリスト要素に merge
属性があります。エレメントで merge="true"
が指定されている場合、子のリストはオーバーライドされるのではなく、親のリストと結合されます。
次の例では、Step
"concreteStep3" が 2 つのリスナー 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>