6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Spring Boot 2.3 x Spring Batch 4.2のチャンクモデルで雛形として使えそうなHello Worldなプロジェクトを作ってみた

Posted at

はじめに

初心者向けの入門系記事です。

チャンクモデルで何かバッチを作るときに雛形として使えるようにHello Worldなプロジェクトを作ったので、その提供と超簡単な解説をします。

というのもSpring Batchはヘビー級で最初の一歩を踏み出すのが大変です(私がそうでした)。
Spring Batchのアーキテクチャを理解し、最小構成(に近いもの)で最後まで動かすまでの難易度が高いと感じたのですが、一度動きだせば多少は難易度が下がった気がしたので、他の皆様にとってのその足がかりになるような記事になればと思い公開します。

なお、本記事ではチャンクモデル選定基準や各クラスの詳細の用途の解説・紹介はしません(というかそこまで詳しくないのでQiitaでは自信をもって解説できません)。

チャンクモデル選定基準については、参考になったTERASOLUNA記事だけここに貼っておきます。
チャンクモデルとタスクレットモデルの使い分け

技術スタック

  • spring boot 2.3.x
  • spring batch 4.2.x
  • kotlin 1.3.x

Hello World Example by Spring Boot Batch

さっそくですがサンプルコードはこちらです。

hello world example by spring boot batch

Chunk Model Activity Diaglam

ただコードを共有されても、チャンクモデルがどう動いているのか把握しづらいので簡単なアクティビティ図を記載します。
もしかしたら細かいところ間違えているかもしれません1が、アクティビティ図にするとこんな感じで動いているようです。

SpringBatchアクティビティ図.png

エラー発生時にChunkListener#afterChunkErrorが呼び出されますが、この図に反映していません。
エラーが発生したらその直後に呼び出され、ステップ自体が中止されたのち、StepExecutionListener#afterStepが呼び出されるようです。

アクティビティ図にするとこんなふうに動いていました。

SpringBatchアクティビティ図 エラー.png

登場している用語の説明

アクティビティ図だけ見ても各処理が何を意味するのかわからないとおもうので用語の簡単な解説をしておきます。

用語 説明
Job バッチの実行単位、タスク(ステップ)のまとまり。一般的なバッチジョブと同義。
Step ジョブを複数に分割する必要がある場合に、その分割したまとまりのこと
Chunk reader -> processor -> writerのサイクルを回すまとまり(=何件処理するごとにコミットするか)のこと。 100件のデータに対してチャンクサイズ10を指定すると10のチャンクが発生。10回に分けてコミットする。
ItemReader 処理対象となるデータを入力する csvから読み込む、DB検索する
ItemProcessor 入力データを加工する。
加工が必要ない場合は、パススルーも可能
データの加工
ItemWriter ItemProcessorで加工したデータに対して最終処理を行う DBへの永続化
JobExecutionListener ジョブ実行前後に処理を挟む ログの出力、slackへの通知
StepExecutionListener ステップ実行前後に処理を挟む ログの出力、slackへの通知
ChunkListener チャンク実行前後とエラー発生時に処理を挟む ログの出力、slackへの通知

最後に

本記事で紹介したものはSpring Batchの機能のごく一部です。

実際にはStepの結果で分岐したり、並行実行したり、DBから読み込むItemReaderだったりファイルから読み込むItemReaderがあったり、複数のitemProcessorを合成する方法だったり、、、多岐にわたる機能があり短時間で仕様の全体像を把握するのはとても難しいと思います。

そのため、まずは今回の記事で共有したようなハローワールドレベルのプロジェクトを足がかりに必要な機能を調べて足していってはいかがでしょうか?

  1. 間違いに気づいた人はぜひコメントでご指摘頂けると嬉しいです。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?