從父 Step 繼承

如果一組 Step 共享相似的配置,那麼定義一個“父” Step 可能很有用,具體的 Step 可以從它繼承屬性。與 Java 中的類繼承類似,“子” Step 會將其元素和屬性與父級的元素和屬性結合起來。子級還會覆蓋父級 Step 的任何屬性。

在以下示例中,Step concreteStep1 繼承自 parentStep。它使用 itemReaderitemProcessoritemWriterstartLimit=5allowStartIfComplete=true 進行例項化。此外,commitInterval5,因為它被 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 屬性仍然是必需的。這有兩個原因

  • 當持久化 StepExecution 時,id 用作步驟名稱。如果同一個獨立步驟在作業中的多個步驟中被引用,則會發生錯誤。

  • 當建立作業流時,如本章後面所述,next 屬性應該引用流中的步驟,而不是獨立步驟。

抽象 Step

有時,可能需要定義一個不完整 Step 配置的父 Step。例如,如果 readerwritertasklet 屬性從 Step 配置中省略,則初始化會失敗。如果必須在沒有這些屬性中的一個或多個的情況下定義父級,則應使用 abstract 屬性。abstract Step 僅用於擴充套件,從不例項化。

在以下示例中,如果 Step (abstractParentStep) 未宣告為抽象,則它不會被例項化。Step (concreteStep2) 具有 itemReaderitemWritercommit-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>

合併列表

Step 上的一些可配置元素是列表,例如 <listeners/> 元素。如果父級和子級 Step 都聲明瞭 <listeners/> 元素,則子級的列表會覆蓋父級的列表。為了允許子級向父級定義的列表新增額外的監聽器,每個列表元素都有一個 merge 屬性。如果元素指定 merge="true",則子級的列表會與父級的列表合併,而不是覆蓋它。

在以下示例中,Step "concreteStep3" 是透過兩個監聽器建立的:listenerOnelistenerTwo

<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>
© . This site is unofficial and not affiliated with VMware.