SpringBoot(kotlin)で手軽なバッチ処理を実装する
はじめに
SpringBootを使って手軽にバッチ処理のようなものを作ったのでメモがてら書きます。 SpringBootではSpringBatchという形で実装する手段があるかと思いますが 手軽な環境を構築したい場合を想定したものになります。
実装したもの
以下の構成で実装しました。
要素 | version |
---|---|
SpringBoot | 2.4.5 |
jvm | 11 |
※言語はKotlinを使います。
環境はmac os上でIntelliJ IDEA上で動作させています。
実装内容
主に実装手順になります。
雛形作成
Spring initializrを使って生成します。 https://start.spring.io/
GroupやArtifactなどは適当なものを設定しています。 入力は以下の感じになります。
これでGENERATEを押します。 すると雛形がダウンロードされるので任意の場所に配置します。
読み込み
ここからintelij ideaを使ってプロジェクトを作成します。 さきほどダウンロードした雛形ファイルを読み込むことでプロジェクトを作成します。
実装開始
動作イメージ
最終的には起動引数を設定するとアプリケーションが起動し処理が行われることがゴールになります。 これを目指します。
以下のコマンドを実行することで動作させることになります。
java -Dbatch.execute=test01 -jar light-0.0.1-SNAPSHOT.jar
処理の受け口を作る
良く作られるものはAPIだったり、Web画面用のControllerだったりすると思うのですがここでは 軽量なバッチをイメージしているものなので、起動方法がちょっと異なります。
ApplicationRunnerの実装
以下のようにApplicationRunnerを実装したクラスを作成します。 ここでは引数に渡された値によって処理が分かれるイメージを想定するので2つ作成します。
package com.hiswing.lightweight import org.springframework.boot.ApplicationArguments import org.springframework.boot.ApplicationRunner import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration class LightWeight01Runner : ApplicationRunner { override fun run(args: ApplicationArguments?) { println("lightweight01 start") } } @Configuration class LightWeight01Config { @Bean @ConditionalOnProperty(value = ["batch.execute"], havingValue = "test01") fun execute(): LightWeight01Runner? { return LightWeight01Runner() } }
2つめ
package com.hiswing.lightweight import org.springframework.boot.ApplicationArguments import org.springframework.boot.ApplicationRunner import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration class LightWeight02Runner : ApplicationRunner { override fun run(args: ApplicationArguments?) { println("lightweight02 start") } } @Configuration class LightWeight02Config { @Bean @ConditionalOnProperty(value = ["batch.execute"], havingValue = "test02") fun execute(): LightWeight02Runner? { return LightWeight02Runner() } }
起動確認
IntelliJ IDEAで動作確認
準備
引数で起動するクラスを制御しているのでその引数を設定する必要があります。 ここでは以下のようにしました。
起動確認
lightweight02 startが出力されているのを確認できました。
コマンドラインで起動確認
IntelliJ IDEAではなく、生成されたjarをコマンドで実行できることを確認します。
java -Dbatch.execute=test01 -jar build/libs/lightweight-0.0.1-SNAPSHOT.jar
以下、実行結果です。今度は、lightweight01 startと出力されているので、引数によって起動する処理が変わっているのが わかりました。
まとめ
比較的簡単にバッチのようなものの実装ができました。 軽量な処理をさっと書きたいときは便利だと思います!
実装したソースコードはこちらにあります。 github.com
参考サイト
今回の実装の参考としてこちらを参照しました。 qiita.com qiita.com SpringBatchはこちらのバッチ解説PDFを参照したい www.shoeisha.co.jp