Spring Boot Batchの作成方法
こんにちは東です。
今回はSpring Boot Batchの作成について書いていきます。
プロジェクトの作成からHello Worldの出力までです。
- まずはプロジェクトの作成
- クラスを作成
作るクラスは以下の通り
- アプリケーションクラス
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("ジョブ終了");
}
}
- 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!!」が出力されているのがわかると思います。
今回はとても簡単な内容になるので、これ以上の説明はありませんが、
非同期での実行等、できることは沢山あるので、ぜひ使ってみてください。
元々Javaエンジニアからはじまり、気付けばJS(ES6)、AWS、Python3.6、OutsystemsPlatform、PHPと色々やってました。
得意技: Java、JS(ES6)、AWSの一部リソース
勉強中: AWSの各種リソースと、Python3.6
MarkDownからASCiiDocへ目覚めつつある今日この頃。
座右の銘は「一言芳恩」「華麗奔放」「不決断こそ最大の害悪である」です。
コメント