Spring Boot Batchの作成方法

Spring Boot Batchの作成方法

Spring Boot Batchの作成方法

こんにちは東です。
今回はSpring Boot Batchの作成について書いていきます。
プロジェクトの作成からHello Worldの出力までです。

  1. まずはプロジェクトの作成
  • 下図のように、「ファイル」⇒「新規」⇒「Spring スターター・プロジェクト」を選択

  • プロジェクト名やパッケージを記入して次へ

  • 「バッチ」にチェックを入れて「完了」

  1. クラスを作成
    作るクラスは以下の通り
  • アプリケーションクラス
package com.example.demo.application;

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

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

  • Jobの設定を記載するクラス
package com.example.demo.application;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecutionListener;
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;

@Configuration
@EnableBatchProcessing
public class SampleJobConfig {

@Autowired
private SampleTasklet tasklet;
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;

@Bean
public Step samplestep() {
return stepBuilderFactory.get("samplestep")
.tasklet(tasklet)
.build();
}

@Bean
public Job job(Step step1 ) {
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.listener(listener())
.start(step1)
.build();
}

@Bean
public JobExecutionListener listener() {
return new JobListener();
}
}

  • 処理の内容を記載するTaskletクラス
package com.example.demo.application;

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 SampleTasklet implements Tasklet{

@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("Hello World!!");
return RepeatStatus.FINISHED;
}
}

  • リスナークラス
package com.example.demo.application;

import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.listener.JobExecutionListenerSupport;

public class JobListener extends JobExecutionListenerSupport {

@Override
public void beforeJob(JobExecution jobExecution) {
super.beforeJob(jobExecution);
System.out.println("ジョブ開始");
}

@Override
public void afterJob(JobExecution jobExecution) {
super.afterJob(jobExecution);
System.out.println("ジョブ終了");
}

}
  1. Jobを実行

. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.5.RELEASE) 2019-05-21 01:30:53.483 INFO 95764 --- [ main] c.e.d.application.DemobatchApplication : Starting DemobatchApplication on Taka-PC with PID 95764 (C:\Users\Taka\Documents\workspace-sts-3.9.8.RELEASE\demobatch\target\classes started by XXX in C:\Users\XXX\Documents\workspace-sts-3.9.8.RELEASE\demobatch) 2019-05-21 01:30:53.485 INFO 95764 --- [ main] c.e.d.application.DemobatchApplication : No active profile set, falling back to default profiles: default 2019-05-21 01:30:54.130 INFO 95764 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2019-05-21 01:30:54.207 INFO 95764 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2019-05-21 01:30:54.263 INFO 95764 --- [ main] o.s.b.c.r.s.JobRepositoryFactoryBean : No database type set, using meta data indicating: H2 2019-05-21 01:30:54.329 INFO 95764 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : No TaskExecutor has been set, defaulting to synchronous executor. 2019-05-21 01:30:54.474 INFO 95764 --- [ main] c.e.d.application.DemobatchApplication : Started DemobatchApplication in 1.227 seconds (JVM running for 1.891) 2019-05-21 01:30:54.475 INFO 95764 --- [ main] o.s.b.a.b.JobLauncherCommandLineRunner : Running default command line with: [--spring.output.ansi.enabled=always] 2019-05-21 01:30:54.525 INFO 95764 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=job]] launched with the following parameters: [{run.id=1, -spring.output.ansi.enabled=always}] ジョブ開始 2019-05-21 01:30:54.541 INFO 95764 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [samplestep] Hello World!! ジョブ終了 2019-05-21 01:30:54.554 INFO 95764 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=job]] completed with the following parameters: [{run.id=1, -spring.output.ansi.enabled=always}] and the following status: [COMPLETED] 2019-05-21 01:30:54.558 INFO 95764 --- [ Thread-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... 2019-05-21 01:30:54.560 INFO 95764 --- [ Thread-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.

Jobの実行結果に、リスナーに記載した各出力「ジョブ開始」「ジョブ終了」が出力されていますね。
「ジョブ開始」と「ジョブ終了」の間に、「Hello World!!」が出力されているのがわかると思います。

今回はとても簡単な内容になるので、これ以上の説明はありませんが、
非同期での実行等、できることは沢山あるので、ぜひ使ってみてください。

コメント

タイトルとURLをコピーしました