ItemReader

シンプルなコンセプトですが、ItemReader は多くの異なる型の入力からデータを提供する手段です。最も一般的な例は次のとおりです。

  • フラットファイル: フラットファイルアイテムリーダーは、通常ファイル内の固定位置で定義されたデータフィールドまたは特殊文字(コンマなど)で区切られたデータフィールドを持つレコードを記述するフラットファイルからデータ行を読み取ります。

  • XML: XML ItemReader は、オブジェクトの解析、マッピング、検証に使用されるテクノロジーとは独立して XML を処理します。入力データにより、XSD スキーマに対する XML ファイルの検証が可能になります。

  • データベース: データベースリソースにアクセスして、処理のためにオブジェクトにマッピングできる結果セットを返します。デフォルトの SQL ItemReader 実装は、RowMapper を呼び出してオブジェクトを返し、再起動が必要な場合は現在の行を追跡し、基本的な統計を保存し、後で説明するトランザクションの強化を提供します。

さらに多くの可能性がありますが、この章の基本的なものに焦点を当てます。利用可能なすべての ItemReader 実装の完全なリストは、付録 A にあります。

ItemReader は、次のインターフェース定義に示すように、一般的な入力操作の基本的なインターフェースです。

public interface ItemReader<T> {

    T read() throws Exception;

}

read メソッドは、ItemReader の最も重要な契約を定義します。それを呼び出すと、1 つのアイテム、またはアイテムが残っていない場合は null が返されます。アイテムは、ファイル内の行、データベース内の行、XML ファイル内の要素を表す場合があります。通常、これらは使用可能なドメインオブジェクト(Trade、Foo など)にマップされることが期待されますが、契約ではそうする必要はありません。

ItemReader インターフェースの実装は前方のみであると想定されています。ただし、基となるリソースがトランザクション処理されている場合 (JMS キューなど)、ロールバックシナリオでは、read の呼び出しによって後続の呼び出しで同じ論理項目が返される可能性があります。フォールトトレラントステップが失敗した read 呼び出しを再試行する場合も同様です ( 再試行して ItemReader を参照)。再試行された read は、読み取り実装が項目が正常に読み取られるまで位置を進めない限り、次の項目ではなく、同じ論理項目を再び返すことが想定されています。また、ItemReader が処理する項目がない場合でも例外がスローされないことにも注意が必要です。例: クエリが 0 の結果を返すように構成されたデータベース ItemReader は、read の最初の呼び出しで null を返します。