SpringBatch:ItemWriterについて

提供: omotenashi-mind
移動: 案内検索


Spring Batch 関連記事一覧へ

ItemWriterは名前のとおり、バッチ処理における結果出力を司る役割を持ったインターフェイスです。SpringBatchでは、標準でファイル(csv, xml等)、DB(JDBC, Hibernate, JPA等)など様々な形式へのデータ出力機能を提供してくれています。もちろん、独自のItemWriterを定義することで任意の出力先に結果を出力することも加能になっています。ここではItemWriterの基本的な使用方法と、標準で用意されている利便性の高いItemWriterをいくつかご紹介したいと思います。

ItemWriterの基本

Stepについて」でもまとめましたが、ItemWriterはコミット周期分データを読み込み、加工した後に呼び出される手順となっています。この仕様はItemWriterの定義からも確認できます。
(ItemWriterのwriteメソッド)

public void write(List<? extends T> items) throws Exception

SpringBatchフレームワークから呼び出されるItemWriter#write()メソッドは、パラメータとして出力対象となるオブジェクトではなく、List型を受け取るよう定義されています。このインターフェイス・レイアウトからも、出力処理がある程度まとめられた形で呼び出されることがお分かりいただけるのではないでしょうか。

ItemWriterの利用方法

ItemWriterはチャンク(Chunk)に設定して利用します。チャンクに設定されたItemWriterは、手前で処理されたItemProcessorが返却したオブジェクトをリストで受けとるようになっています。以下、実際の設定例です。
(ItemWriterの設定例)

<bean id="writer" class="com.omotenashimind.labo.ExampleItemWriter" />
<batch:job id="job1">
  <batch:step id="step1">			
    <batch:tasklet transaction-manager="transactionManager" start-limit="100" >
      <batch:chunk reader="reader" processor="processor" writer="writer" commit-interval="3" />
    </batch:tasklet>
  </batch:step>
</batch:job>

上記の例のように、ItemWriterをBeanコンテナに登録し、そのItemWriterをチャンクのwriter属性に設定することでItemWriterが呼び出されるようになります。

複数の出力先を指定する

バッチ処理の内用によっては、複数の出力先を指定した場合もあるかと思います。そんな場合に利用できるのが「org.springframework.batch.item.support.CompositeItemWriter」クラスです。以下、実際の使用方法です。

<beans:bean id="compositeWriter" class="org.springframework.batch.item.support.CompositeItemWriter">
  <beans:property name="delegates">
    <beans:list>
      <beans:ref bean="fileItemWriter1" />
      <beans:ref bean="fileItemWriter2" />
    </beans:list>
  </beans:property>
</beans:bean>
<batch:job id="job1">
  <batch:step id="step1">			
    <batch:tasklet transaction-manager="transactionManager" start-limit="100" >
      <batch:chunk reader="reader" processor="processor" writer="compositeWriter" commit-interval="3" />
    </batch:tasklet>
  </batch:step>
</batch:job>

上記の例のように、CompositeItemWriterに複数のItemWriterを設定し、そのCompositeItemWriterをチャンクに設定することで複数の出力先への結果出力ができるようになります。

便利なItemWiterのご紹介

HibernateItemWriter

HibernateItemWriterは名前が示す通り、HibernateのO/Rマッピングの仕組みを利用したDB出力用クラスです。具体的な使用方法は「こちら」にもまとめていますので、ご覧ください。

FlatFileItemWriter

テキストファイル出力用クラスです。任意の区切り文字でファイル出力ができるため、CSV形式、TSV形式で出力することも加能です。コードを書くことなくファイル出力ができるため、かなり便利だと思います。必要に応じてヘッダーやフッターをつけることもできます。

SimpleMailMessageItemWriter

メール送信用クラスです。「オーダー処理完了後、サンクスメールを送信」といったシチュエーションにも利用できます。

Spring Batch 関連記事一覧へ