SpringBoot batchでhello world(Tasklet)

SpringBootとSpring batchを使用してhello worldを表示するサンプルです。
(確認環境:Spring Boot 2.5,JDK 11)

目次

サンプル バッチ処理実行の流れ
  ジョブとステップを実行する(BatchConfig.java)
  HelloFirst.java / HelloSecond.java
  pom.xml / application.yml
実行結果

バッチ処理実行の流れ

chunkとtaskletの違い

spring batchには処理の機能として2つあります。
チャンク(chunk)・・・入力、処理、出力の流れ。大量データを扱うのに向いています。
タスクレット(tasklet)・・・自由に記述できる。
このサンプルは、タスクレットです。

作成するファイル

バッチ処理実行の主な流れは、以下のとおりです。

1.Spring boot appをクリックして起動する。

2.BatchConfig.javaでJobとstepが実行される。
→それに伴いHelloFirst.javaとHelloSecondも呼ばれる。

githubにコードがあります。
https://github.com/ut23405/springbatch/tree/main/springboot-bt-tasklet

 

ジョブとステップを実行する(BatchConfig.java)

package com.example.demo;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@EnableBatchProcessing
@Configuration
public class BatchConfig {
	@Autowired private HelloFirst HelloFirst;
	@Autowired private HelloSecond HelloSecond;
	@Autowired private JobBuilderFactory jobBuilderFactory;
	@Autowired private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Job testJob1(Step testStep1,Step testStep2) {
        return jobBuilderFactory.get("testJob")
        		.incrementer(new RunIdIncrementer())
				.start(testStep1)
				.next(testStep2)
                .build();
    }

    @Bean
    public Step testStep1() {
        return stepBuilderFactory.get("TestStep11")
                .tasklet(HelloFirst)
                .build();
    }
    @Bean
    public Step testStep2() {
        return stepBuilderFactory.get("TestStep21")
                .tasklet(HelloSecond)
                .build();
    }
}

22行目は、ジョブ(job)です。25,26行目でステップ(step)を実行します。
31,37行目は、ステップ(step)です。HelloFirstとHelloSecondのクラスを呼んでいます。

HelloFirst.java

package com.example.demo;

import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.stereotype.Component;

@Component
public class HelloFirst implements Tasklet {
	@Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) 
    		throws Exception {
        System.out.println("Hello World First");
        return RepeatStatus.FINISHED;
    }
}

10行目はTaskletを実装しています。
14行目は実行されると文字列を出力します。

HelloSecond.java

package com.example.demo;

import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.stereotype.Component;

@Component
public class HelloSecond implements Tasklet {
    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) 
    		throws Exception {
        System.out.println("Hello World Second");
        return RepeatStatus.FINISHED;
    }
}

10行目はTaskletを実装しています。
14行目は実行されると文字列を出力します。

pom.xml

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>

spring-boot-starter-batchとh2データベースをセットしています。
spring batchには何らかのデータベースが必要です。または起動ファイルで@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})とした場合は不要になります。

SpringbootBtApplication

package com.example.demo;

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

@SpringBootApplication
//@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class SpringbootBtApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootBtApplication.class, args);
	}
}

 

application.yml

server:
  port: 8765

h2データベースを使用していますが設定は不要でした。

実行結果

コンソールに文字列が出力されます。

関連の記事

SpringBoot @RestControllerの戻り値を確認

△上に戻る