サンプルの説明
では、以下からダウンロードできるサンプルコードに触れながら細かく見ていこう。
サンプルコードのダウンロード
: 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>
まず、
次に、
step1のparentとなるBean定義(simpleStep)にも注目してほしい。
ここでは、Spring Batchのコア実装である「SimpleStepFactoryBean」を使用し、Stepの振る舞いを定義している。
属性の説明は以下のとおりだ。
プロパティ | 説明 |
---|---|
transactionManager | バッチ処理で使用するトランザクションマネージャーを指定する。 |
jobRepository | Job・Stepの実行状態メタデータを保持するリポジトリを指定する。このサンプルではHSQLデータベースに保持している。 |
startLimit | Stepの最大実行回数を指定できる。リスタート時など、特定のStepに実行数制限を掛けたいときに使用する。 |
commitInterval | 1回のItemWrite処理に対するItemReadの数を指定する。読み込んだ複数のInputデータをまとめて処理することができる。 |