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 ファイル内の要素を表す場合があります。通常、これらは使用可能なドメインオブジェクト(TradeFoo など)にマップされることが期待されますが、契約ではそうする必要はありません。

ItemReader インターフェースの実装はフォワードのみであることが期待されます。ただし、基礎となるリソースがトランザクション(JMS キューなど)の場合、read を呼び出すと、ロールバックシナリオの後続の呼び出しで同じ論理項目が返される場合があります。また、ItemReader で処理するアイテムが不足していても、例外がスローされることはありません。例: 0 の結果を返すクエリで構成されたデータベース ItemReader は、read の最初の呼び出しで null を返します。