Spring Batch Hello world
Spring Batchを試していきます。
Batch処理はshellかrubyで書けば良いと思うんですが、せっかくのSpring系列にいたので試してみます。
利点としてはプロパティファイルを共有できるという点があるようです。
以下が参考元です。
Spring Batch
Spring Batch 3.0うごかす - kagamihogeの日記
1つめの公式に対して2つめの方ではラムダ式で実装しています。
プロジェクトの作成
- STS(Spring Tool Suite)から新規プロジェクトを作成します。
今回はBatchを選択します。
バッチのジョブ作成
- 新規クラスを作成します。
(@SpringBootApplicationのパッケージと同等か配下に作成してください) - 2つ目のソースを写経します。
jobメソッドの引数を変えています。
実行
実行すると、自動でバッチが叩かれ、Hello worldと出ています。
解説
- @EnableBatchProcessingを付けることで、自動でBatchのジョブと認識されます。
- @Configurationを付けることでComponentScanに含めます。
- @BeanでDIコンテナに登録していきます
- Jobを返すメソッドを作成します
@Autowired private JobBuilderFactory jobs; @Bean public Job job(Step step1, Step step2) { return jobs.get("myJob").start(step1()).next(step2()).build(); }
- JobBuilderFactoryのget(ジョブ名)でJob Builderを取得します。
(なぜget何でしょうか?) - JobBuilderに対してstart(最初に起動される処理)
- next(次に起動される処理)と続けて記述します。
登録されているstep1,step2は同じクラス内で作成します。
@Autowired private StepBuilderFactory stepBuilderFactory; @Bean protected Step step1() { return stepBuilderFactory.get("step1") .tasklet(new Tasklet() { public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) { return null; } }) .build(); } @Bean protected Step step2() { ... }
Stepも同様に
- @BeanでDIコンテナに登録
- StepBuilderFactoryにget(処理タスク名)でStep Builderを取得します。 (なぜgetなんでしょうか)
- Taskletクラスにメソッドを登録します。
- executeのメソッド内にバッチの処理を記述します。
最終的にはREST APIを叩く、結果によってメール通知するまでバッチに仕込みたいです。
タイマーによる定期実行等もできるようです。