ItemReader
儘管概念簡單,但 ItemReader
是從多種不同型別的輸入中提供資料的方式。最常見的例子包括
-
平面檔案:平面檔案 Item Reader 從平面檔案中讀取資料行,這些檔案通常透過檔案中固定的位置或由特定字元(例如逗號)分隔的欄位來描述記錄。
-
XML:XML
ItemReaders
處理 XML,而無需依賴用於解析、對映和驗證物件的技術。輸入資料允許針對 XSD schema 驗證 XML 檔案。 -
資料庫:訪問資料庫資源以返回結果集,這些結果集可以對映到物件進行處理。預設的 SQL
ItemReader
實現呼叫RowMapper
來返回物件,如果需要重啟,則跟蹤當前行,儲存基本統計資訊,並提供一些後面解釋的事務增強功能。
還有很多其他可能性,但本章重點介紹基本型別。所有可用的 ItemReader
實現的完整列表可在 Appendix A 中找到。
ItemReader
是一個用於通用輸入操作的基本介面,如下面的介面定義所示
public interface ItemReader<T> {
T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException;
}
read
方法定義了 ItemReader
最基本的契約。呼叫它會返回一個 item,如果沒有更多 item,則返回 null
。一個 item 可能代表檔案中的一行、資料庫中的一行或 XML 檔案中的一個元素。通常期望這些 item 被對映到可用的領域物件(例如 Trade
、Foo
或其他),但契約中沒有強制要求這樣做。
ItemReader
介面的實現通常應是隻向前(forward only)的。然而,如果底層資源是事務性的(例如 JMS 佇列),那麼在回滾場景下,後續呼叫 read
可能會返回相同的邏輯 item。另外值得注意的是,ItemReader
沒有 item 可處理時不會丟擲異常。例如,配置的查詢返回 0 條結果的資料庫 ItemReader
在首次呼叫 read
時將返回 null
。