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
の最も重要な契約を定義します。それを呼び出すと、1 つのアイテム、またはアイテムが残っていない場合は null
が返されます。アイテムは、ファイル内の行、データベース内の行、XML ファイル内の要素を表す場合があります。通常、これらは使用可能なドメインオブジェクト(Trade
、Foo
など)にマップされることが期待されますが、契約ではそうする必要はありません。
ItemReader
インターフェースの実装はフォワードのみであることが期待されます。ただし、基礎となるリソースがトランザクション(JMS キューなど)の場合、read
を呼び出すと、ロールバックシナリオの後続の呼び出しで同じ論理項目が返される場合があります。また、ItemReader
で処理するアイテムが不足していても、例外がスローされることはありません。例: 0 の結果を返すクエリで構成されたデータベース ItemReader
は、read
の最初の呼び出しで null
を返します。