サンプルの説明

では、以下からダウンロードできるサンプルコードに触れながら細かく見ていこう。

サンプルコードのダウンロード
 : simple-cli-archetype-extension.zip

バッチ処理起動コマンド

Spring Batchでは、コマンドラインからバッチを起動するために、「CommandLineJobRunner」クラスが提供されている。今回はこのクラスを用いてサンプルバッチを起動している。

CommandLineJobRunner の引数は下表のようになっている。

順番 引数 説明
1 jobPath Job定義を含むSpring設定ファイル(XML)のパスを指定する。
2 jobIdentifier 実行対象のJob IDを指定する。
3 jobParameters Jobに引き渡すパラメータを指定することができる。

その他、オプション(- restart、-next)を指定することもできる。

SpringBatch 設定ファイル(XML)

Spring Batchでは、Job、Stepといったバッチ構成の定義をSpring設定ファイル(XML)に記述している。

サンプルのJob定義は、src/main/resources/META-INF/spring/module-context.xmlで定義されている。

<job id="job1" xmlns="http://www.springframework.org/schema/batch" incrementer="jobParametersIncrementer">
<step id="step1" parent="simpleStep">
<tasklet>
<chunk reader="reader" writer="writer" />
</tasklet>
</step>
</job>
<bean id="reader" class="example.ExampleItemReader" />
<bean id="writer" class="example.ExampleItemWriter" />
<!-- enables the functionality of JobOperator.startNextInstance(jobName) -->
<bean id="jobParametersIncrementer" class="org.springframework.batch.core.launch.support.RunIdIncrementer" />
<bean id="simpleStep"
class="org.springframework.batch.core.step.item.SimpleStepFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="jobRepository" ref="jobRepository" />
<property name="startLimit" value="100" />
<property name="commitInterval" value="1" />
</bean>

まず、タグでjob1という名前のJobを定義している。このJobは一つのStep(step1)を持つJobだ。

次に、タグの中のタグにて、StepのプロセスUnitである ItemReader、ItemWriterの2つを定義している。それぞれ、「reader」「writer」というBean IDのクラスを参照させている。

step1のparentとなるBean定義(simpleStep)にも注目してほしい。

ここでは、Spring Batchのコア実装である「SimpleStepFactoryBean」を使用し、Stepの振る舞いを定義している。

属性の説明は以下のとおりだ。

プロパティ 説明
transactionManager バッチ処理で使用するトランザクションマネージャーを指定する。
jobRepository Job・Stepの実行状態メタデータを保持するリポジトリを指定する。このサンプルではHSQLデータベースに保持している。
startLimit Stepの最大実行回数を指定できる。リスタート時など、特定のStepに実行数制限を掛けたいときに使用する。
commitInterval 1回のItemWrite処理に対するItemReadの数を指定する。読み込んだ複数のInputデータをまとめて処理することができる。