しおしお

IntelliJ IDEAのことなんかを書いてます

JBeretでジョブ定義をロジックで構築して実行する

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

おわり。