ItemStream

ItemReaders と ItemWriters は両方ともそれぞれの目的を十分に果たしますが、別のインターフェースを必要とする共通の懸念が両方にあります。一般に、バッチジョブの範囲の一部として、リーダーとライターを開いて閉じ、状態を保持するメカニズムが必要です。次の例に示すように、ItemStream インターフェースはその目的を果たします。

public interface ItemStream {

    void open(ExecutionContext executionContext) throws ItemStreamException;

    void update(ExecutionContext executionContext) throws ItemStreamException;

    void close() throws ItemStreamException;
}

各メソッドを説明する前に、ExecutionContext にメンションする必要があります。ItemStream も実装する ItemReader のクライアントは、read を呼び出す前に open を呼び出して、ファイルなどのリソースを開いたり、接続を取得したりする必要があります。同様の制限が、ItemStream を実装する ItemWriter に適用されます。第 2 章で記述されていたように、予想されるデータが ExecutionContext で見つかった場合、それを使用して ItemReader または ItemWriter を初期状態以外の場所で開始することができます。逆に、close は、オープン中に割り当てられたリソースが安全に解放されるようにするために呼び出されます。update は主に、現在保持されている状態が提供された ExecutionContext にロードされることを保証するために呼び出されます。このメソッドは、コミット前に呼び出され、コミット前に現在の状態がデータベースに保持されるようにします。

ItemStream のクライアントが Step (Spring Batch コアから)である特別な場合、StepExecution ごとに ExecutionContext が作成され、同じ JobInstance が返された場合にユーザーが特定の実行の状態を保存できるようになります。再び開始されます。Quartz に精通している人にとって、セマンティクスは Quartz JobDataMap と非常に似ています。