ItemStream

ItemReaderItemWriter 各自都很好地完成了它們的功能,但它們之間有一個共同的關注點,這需要另一個介面。通常,作為批處理作業範圍的一部分,讀取器和寫入器需要開啟、關閉,並且需要一種持久化狀態的機制。ItemStream 介面正是為了實現這個目的,如下例所示

public interface ItemStream {

    void open(ExecutionContext executionContext) throws ItemStreamException;

    void update(ExecutionContext executionContext) throws ItemStreamException;

    void close() throws ItemStreamException;
}

在描述每個方法之前,我們應該提一下 ExecutionContext。實現了 ItemStreamItemReader 客戶端應該在任何呼叫 read 之前呼叫 open,以便開啟檔案等資源或獲取連線。類似的限制也適用於實現了 ItemStreamItemWriter。正如第2章所述,如果在 ExecutionContext 中找到預期資料,它可以用作從非初始狀態的位置啟動 ItemReaderItemWriter。相反,呼叫 close 是為了確保在 open 期間分配的任何資源都被安全釋放。呼叫 update 主要為了確保當前持有的任何狀態都載入到提供的 ExecutionContext 中。此方法在提交之前呼叫,以確保當前狀態在提交前持久化到資料庫中。

ItemStream 客戶端是 Step (來自 Spring Batch Core) 的特殊情況下,會為每個 StepExecution 建立一個 ExecutionContext,以允許使用者儲存特定執行的狀態,並期望如果再次啟動相同的 JobInstance,該狀態會被返回。對於熟悉 Quartz 的使用者來說,其語義與 Quartz 的 JobDataMap 非常相似。

© . This site is unofficial and not affiliated with VMware.