LoginSignup
1
2

More than 1 year has passed since last update.

SpringBootにおけるバッチ処理

Posted at

https://qiita.com/kazuki43zoo/items/47ed3b15077773f02448
上記記事を参考にさせていただきました

SpringBootで何らかのバッチ処理を作る際に高機能でジョブを制御する仕組みがあるSpringBatchを使いたくないようなケースがあります(例えばジョブスケジューラーなどを利用していてジョブは実行するだけにしたい場合など)。その場合はJavaコマンド実行してリターンコードで結果を返すようなシンプルな構造にしたい。

やりたいこと

・SpringBootでコマンド実行して指定した処理を動かす
・機能ごとにクラスを分けてどの機能を動かすか?は引数で指定する
・ジョブの成功/失敗はコマンド実行のリターンコードで判断する

構成

実行コマンドイメージ

java exec:<実行したいクラス名> -jar filename.jar

コマンド実行した際の最初にコールするクラス

Application.java
package com.example.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
  public static void main(String[] args) {
    System.exit(SpringApplication.exit(SpringApplication.run(SpringBootTestBatchApplication.class, args)));
  }
}

mainから呼び出すクラス

SpringBootTestBatchApplication.java
package com.example.springboot;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import org.springframework.boot.ExitCodeGenerator;

@Component
public class SpringBootTestBatchApplication implements ApplicationRunner, ExitCodeGenerator {
	private int exitCode = 0;
	@Override
	public void run(ApplicationArguments args) {
		String execFuncion = "";
		for(String value : args.getNonOptionArgs()) {
			if(value.startsWith("exec:")) execFuncion = value.substring(4);
		}
        // 実行するクラスの処理
		return;
	}
	@Override
	public int getExitCode() {
	  return exitCode;
	}
}

設定

application.properties
spring.main.banner-mode=off
spring.main.web-application-type=none

引数を読み取り、その入力によって実行するクラスを決めます。実行結果を整数で受け取りリターンコードに入れ込みます。

VScodeにおける引数の指定方法

以下のように「構成の追加」からlunch.jsonを編集可能です
image.png

argsという項目に引数に指定したい文字列を設定すれば、以降VScode上で実行時に引数付きで実行できます

lunch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Launch Application",
            "request": "launch",
            "mainClass": "com.example.springboot.Application",
            "projectName": "spring-boot-test",
            "args": "exec:Testfunc"
        }
    ]
}

上記のように指定した場合は以下のようなコマンド実行となります

java exec:Testfunc -jar SpringBoot.jar
1
2
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
1
2