JBeretでは、ロジックでジョブ定義を構築することが出来るみたいなので試してみた。
これを使うと、xmlでジョブ定義をすることなくバッチを実行することができるようになる。
ただし、JSRで定められているわけではないので、バッチ実行時にJBeretを直接扱う必要がある。
ドキュメントはこちら→Programmatic Job Definition with Java | JBeret User Guide
ジョブ定義を構築する
JobBuilderやStepBuilderを使ってジョブ定義を構築していく感じになる。
batchletやreaderなんかに指定する名前は、xmlに定義する時と同じようにBeanの名称を設定する。
この例だと、sample-jobジョブに2つのステップがあって、batchlet-step -> chunk-stepの順に実行される。
val job = JobBuilder("sample-job") .step( StepBuilder("batchlet-step") .batchlet("sampleBatchlet") .next("chunk-step") .build() ) .step( StepBuilder("chunk-step") .reader("sampleItemReader") .writer("sampleItemWriter") .itemCount(2) .build() ) .build()
ジョブを実行する
ジョブを実行するには、BatchRuntimeから取得したJobOperatorをJBeretの実装(JobOperatorImpl)にダウンキャストしてあげる。
JobOperatorImplには、JobBuilderで構築したJobオブジェクトを指定してジョブを実行するメソッドが用意されているので、それを使ってジョブを実行してあげる。
val jobOperator = BatchRuntime.getJobOperator() as JobOperatorImpl
val executionId = jobOperator.start(job, null)
ソースは全体はこちら→GitHub
おわり。