03.Spring Batchの基本概念
(起動と起動オプション)
概要
Spring Batchの起動オプションについてみていきます。
起動オプションはコマンドラインから実行したときの概念ですが、javaのコード上から起動した場合も同じような動作をすることもできます。
以下で詳しく見ていきます。
また、ここでの内容が良く分からない場合は、他の記事も先立って読んでいただければと思います。
起動の基本
ジョブ起動時に内部でどのようなオブジェクトが生成されるかを知っておくことは重要なことです。
それを見ていくことにします。
まず、ジョブを起動すると、ジョブ実行オブジェクト(JobExecutionクラス)が生成されます。
JobExecutionは、ジョブの実行情報を保存しておくオブジェクトです。
実行情報とは、例えば、ステータス、実行結果、ジョブ実行ID、JobInstance、実行したステップの情報(StepExecution)、などです。
JobExecutionはコミットなどのタイミングでその都度、最新の情報をDBなどに保存されます。
DBに保存されたJobExecutionの情報があるので、過去に実行したジョブに対する操作が可能になります。
例えばrestart、stopなどの操作です。
【補足】
JobExecutionは、ジョブ実行のたびにIDが生成されます。
そのIDは、ジョブ実行IDと呼ばれています。
以前の記事で、「ジョブ名とジョブパラメタが同じ起動は、JobInstaceが同じになる」と記述しましたが、
それに対してジョブ実行IDはジョブ起動のたびに新しいIDが発行されます。
つまり、同じJobInstanceに対して複数のジョブ実行IDが存在しえます。
起動オプション使用時の注意点
起動オプションの基本的な考え方
起動オプションとは、コマンドラインから実行するときに、ハイフンで指定するオプション(例:-restart)のことです。
オプションを指定しない場合とオプションを指定する場合とでは動作が違います。
それを以下に見ていこうと思います。
まずは、コマンド起動の例を示しておきます。
【起動例】
java org.springframework.batch.core.launch.support.CommandLineJobRunner
classpath:/example/launch-context.xml 122 -restart
(実際には1行で記述します)
赤字の部分に起動オプションを記述します。
また、基本的にはジョブ識別子を記述する箇所にはジョブ実行IDを記述します。(青字の部分)
ジョブ名(例:job1)を指定することもできます。
【起動オプションの考え方】
SpringBatchで用意されている起動オプションは、過去に実行した起動に対して処理を行うものです。
ですので、基本的にはパラメタを記述しても無視されます。
例えば、もし1度目の起動が以下のとおりだったとします。
起動1: "job1 name=taro date=2010/01/21"
起動1のジョブ実行ID: 122
この状態で、上記の【起動例】のとおりにコマンドを記述して実行すると、SpringBatchは、実行ID=122のJobExecutionを検索してきます。
そして、JobExecutionの中にはジョブ名とジョブパラメタを保持していますので、起動すべきジョブ名とジョブパラメタが分かります。
この情報を元にリスタートを開始します。
仮に【起動例】の実行で"name=taro date=2010/01/22"のようにパラメタを指定したとしても、無視され、
"name=taro date=2010/01/21"で起動した場合と同じ動作でリスタートがされます。
【起動時にジョブ名を指定した場合の動作】
ジョブ実行IDではなく、ジョブ名(例:job1など)を指定した場合は、JobExecutionの検索方法が違います。
これも起動オプションの基本的な考え方です。
以下の表を参考にしてみてください。
起動オプションの種類
起動オプションには、以下のような種類があります。
起動時のチェック
起動時には、既に実行し、完了しているかどうか?などのチェックが入ります。
この結果によっては、エラーが発生して処理が中断することがあります。
この動作については、「Spring Batchの基本概念(JobInstance)」に記述していますので、
以下のサブページリストを見ていただければと思います。
Created Date: 2010/01/12