はじめに
バッチ処理の勉強を始めたよ!
Spring Bootを使うときに効率的にバッチ処理を実装する方法はある?
SpringではSpring Batchが現場でもよく使われるよ!
本記事では入門編としてSpring Batchの概念的な部分の解説をしっかり行っていくよ!
Spring Batchとは
Spring BatchはSpringを使ってバッチの開発ができるようになるフレームワークです。
SpringのDIやDBアクセスやその他多くの機能を扱えるため、効率的に開発を進めることができます。
他にもバッチ処理でよく使用される機能をSpring Batchが備えています。例えば、ファイルやDBの読み込み、書き込み、トランザクション管理、ジョブの再起動、スキップ、並行処理、直列処理などがあります。
これらのことから、Javaでのバッチ開発では、Spring Batchを使うことが常識になっています。
Spring Batchの構成
ジョブ(Job)
Jobはバッチ処理全体のことを指します。1つのJobが1つのバッチ処理と考えると良いでしょう。
複数のStepでJobが構成されます。1つのJobを実行するとそのJobを構成する複数のStepが実行されます。
ステップ(Step)
バッチ処理を構成する最小単位のことを指します。1つのJobで複数のStepを実行できます。
Stepは大きくChunkモデル(チャンク)とTaskletモデル(タスクレット)の2種類のモデルに分類されます。これらの違いや特徴は次章で記載しています。
ジョブランチャー(JobLauncher)
JobLauncherはJobを起動(バッチを起動)するための機能です。
ジョブリポジトリ(JobRepository)
JobRepositoryはバッチの実行結果などをデータベースに保存してくれる機能です。
例えば、バッチで処理した件数、データ、バッチに渡したパラメーターなどをJobRepositoryがDBに保存します。
Chunkモデル(チャンク)とTaskletモデル(タスクレット)
Chunkモデル(チャンク)
Chunkモデルは、データの読み込み、加工、書き込みの3つの処理に分割します。各機能を作るために以下のインターフェースが用意されています。
・ItemReader
・ItemProcessor
・ItemWriter
これらのインターフェースを実装したクラスを作成することで、簡単にバッチの定型処理を作成することができます。
Chunkモデルは一定件数でコミットをしながら、処理を行うことが基本となります。
件数処理でエラーが生じると未処理データ、処理済みデータが発生します。また、件数単位のリスタートが可能です。
大量データを安定して処理したい場合は、Chunkモデルが優れています。万が一のエラー後の復旧時には件数単位でリスタートすることができます。
Taskletモデル(タスクレット)
Taskletモデルは、chunkモデルのように機能に応じて分割せずにTaskletの一つに集約します。
Taskletモデルは全体をまとめてコミットすることが基本となります。件数ベースでのリスタートはできず、処理途中でエラーが生じると未処理データのみにロールバックされます。
ソースコードの見通しを良くしたい場合はTaskletを船体すると良いでしょう。また、エラー時のリカバリを楽にしたい場合もTaskletを選択すると良いです。
終わりに
ご覧いただきありがとうございました。ご指摘等がございましたら頂けますと嬉しいです。
引き続き、プログラミングについて定期的に発信していきますのでよろしくお願いします!
また、もしよろしければtwitterもフォローしていただけると嬉しいです!🐢
コメント