SpringBatch:コマンド引数の利用方法

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


Spring Batch 関連記事一覧へ

SpringBatch起動時に、引数(以下、パラメータ)を与えるためのルールについて解説します。

パラメータの渡し方

STSを利用したSpringBatchプロジェクトの作成手順でも触れてますが、SpringBatchアプリケーションをコマンドから実行するためには「org.springframework.batch.core.launch.support.CommandLineJobRunner」クラスを利用します。起動コマンドのフォーマットは次の通りです。

>java org.springframework.batch.core.launch.support.CommandLineJobRunner classpath:/[ジョブ定義ファイル] [起動ジョブID]

ジョブ実行時にパラメータを与えたい場合は、起動ジョブIDの後ろにパラメータを記述するだけです。フォーマットは次の通りです。

[パラメータ名]=[値]

パラメータ名の前にハイフン(-)は必要ありません。

具体例を示します。 ジョブ定義ファイル:launch-context.xml、起動ジョブID:job1、渡したいパラメータ:inputFile、パラメータ値:./inputfile.csvの場合は次のように記述します。

>java org.springframework.batch.core.launch.support.CommandLineJobRunner classpath:/launch-context.xml job1 inputFile=file:./inputfile.csv

パラメータ利用方法

パラメータをジョブ定義ファイル内で利用したい場合は、次のように記述します。

#{jobParameters[パラメータ名]}

上記例ではパラメータとして"inputFile"を渡していますが、これをジョブ定義ファイル上で利用しようとした場合は{$inputFile}を記述します。
実際の定義ファイル上での記述例を示します。

 1: <bean id="itemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
 2:   <property name="lineMapper">
 3:     <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
 4:       <property name="lineTokenizer">
 5:         <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
 6:           <property name="delimiter" value=","/>
 7:           <property name="names" value="id,name,note" />
 8:         </bean>
 9:       </property>
10:       <property name="fieldSetMapper">
11:         <bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
12:           <property name="targetType" value="com.omotenashimind.labo.mapping.EmployeeData" />	
13:         </bean>
14:       </property>
15:     </bean>
16:   </property>
17:   <property name="resource" value="#{jobParameters[inputFile]}" />
18: </bean>

この例では、17行目でパラメータとして受け取ったinputFileのファイルパスを設定しています。パラメータ名は製作者が自由に設定することが加能です。

注意:jobParameters使用時に例外が発生する場合
jobParametersを利用する際に、次のような例外が発生することがあります。

org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0):
Field or property 'jobParameters' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'

これは、jobParametersを利用してイニシャライズしているBeanのスコープが"step"に設定されていない場合に発生します。jobParametersを使用するBeanは必ずstepスコープに登録するようにしてください。

パラメータのデータ型を指定する

パラメータはデフォルトでは文字列型として渡されますが、日付型もしくは数値型で渡す方法も用意されています。 型の指定方法はパラメータ名の後ろにかっこ書きで型を指定します。次に例を示します。
(日付型としてパラメータを渡す)

...  -targetDate(date)=2013/3/16

※時分秒まで場合は文字列から変換して利用する方法となります。
(数値型としてパラメータを渡す)

... -targetNumber(long)=100

その他起動用コマンド

「org.springframework.batch.core.launch.support.CommandLineJobRunner」を利用したジョブの実行では、ジョブパラメータ以外に以下のオプションを任意で設定することも加能です。

オプション 説明
1 -restart 指定ジョブの最後に失敗したジョブインスタンスを再実行します。
2 -stop 指定ジョブのうち、開始されているジョブインスタンスを停止します。
3 -abandon 指定ジョブのうち、開始されているジョブインスタンスをアベンドさせます。
4 -next Jobに設定されている「JobParametersIncrementer」の設定に従って次のシーケンスジョブを実行します。


注意事項

CommandLineJobRunnerは複数のジョブ設定ファイルを読み込んでjobを実行することができません。
起動に必要なファイルが複数にわかれている場合は、それをまとめるジョブ設定ファイルを作成して利用するようにしてください。

Spring Batch 関連記事一覧へ