ItemReader

雖然 ItemReader 的概念很簡單,但它是從許多不同類型的輸入提供資料的方式。最常見的範例包括:

  • 平面檔案:平面檔案 ItemReader 從平面檔案讀取資料行,這些檔案通常描述記錄,其欄位資料由檔案中的固定位置或某些特殊字元(例如逗號)分隔定義。

  • XML:XML ItemReader 處理 XML,與用於剖析、對應和驗證物件的技術無關。輸入資料允許根據 XSD 結構描述驗證 XML 檔案。

  • 資料庫:存取資料庫資源以傳回結果集,這些結果集可以對應到物件以進行處理。預設的 SQL ItemReader 實作會調用 RowMapper 以傳回物件,如果需要重新啟動,則追蹤目前列,儲存基本統計資訊,並提供稍後將說明的交易增強功能。

還有更多可能性,但本章我們重點介紹基本功能。所有可用的 ItemReader 實作的完整列表可以在附錄 A中找到。

ItemReader 是用於通用輸入操作的基本介面,如下面的介面定義所示:

public interface ItemReader<T> {

    T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException;

}

read 方法定義了 ItemReader 最基本的契約。呼叫它會傳回一個項目,如果沒有更多項目,則傳回 null。項目可能代表檔案中的一行、資料庫中的一列或 XML 檔案中的一個元素。一般預期這些項目會對應到可用的領域物件(例如 Trade、Foo 或其他),但契約中沒有這樣的要求。

ItemReader 介面的實作預期是僅向前。但是,如果底層資源是交易性的(例如 JMS 佇列),則在回滾情境中,呼叫 read 可能會在後續呼叫中傳回相同的邏輯項目。還值得注意的是,ItemReader 缺少要處理的項目不會導致擲回例外狀況。例如,配置了傳回 0 個結果的查詢的資料庫 ItemReader 會在第一次調用 read 時傳回 null。