From 3ff89a82c05a07ed13f880fd08e140346f53716f Mon Sep 17 00:00:00 2001 From: haerong22 Date: Thu, 9 Jun 2022 02:11:43 +0900 Subject: [PATCH] #11 spring batch: SimpleJob api - start, next, validator --- .../job/CustomJobParametersValidator.java | 15 ++++ .../basic/job/SimpleJobConfiguration.java | 2 +- .../basic/job/StartNextConfiguration.java | 57 +++++++++++++++ .../basic/job/ValidatorConfiguration.java | 70 +++++++++++++++++++ 4 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 spring-batch/basic/src/main/java/io/springbatch/basic/job/CustomJobParametersValidator.java create mode 100644 spring-batch/basic/src/main/java/io/springbatch/basic/job/StartNextConfiguration.java create mode 100644 spring-batch/basic/src/main/java/io/springbatch/basic/job/ValidatorConfiguration.java diff --git a/spring-batch/basic/src/main/java/io/springbatch/basic/job/CustomJobParametersValidator.java b/spring-batch/basic/src/main/java/io/springbatch/basic/job/CustomJobParametersValidator.java new file mode 100644 index 00000000..87a5d28c --- /dev/null +++ b/spring-batch/basic/src/main/java/io/springbatch/basic/job/CustomJobParametersValidator.java @@ -0,0 +1,15 @@ +package io.springbatch.basic.job; + +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.JobParametersInvalidException; +import org.springframework.batch.core.JobParametersValidator; + +public class CustomJobParametersValidator implements JobParametersValidator { + + @Override + public void validate(JobParameters parameters) throws JobParametersInvalidException { + if (parameters == null || parameters.getString("name") == null) { + throw new JobParametersInvalidException("name parameters is not found"); + } + } +} diff --git a/spring-batch/basic/src/main/java/io/springbatch/basic/job/SimpleJobConfiguration.java b/spring-batch/basic/src/main/java/io/springbatch/basic/job/SimpleJobConfiguration.java index eb2f0f3f..bb66385f 100644 --- a/spring-batch/basic/src/main/java/io/springbatch/basic/job/SimpleJobConfiguration.java +++ b/spring-batch/basic/src/main/java/io/springbatch/basic/job/SimpleJobConfiguration.java @@ -12,7 +12,7 @@ import org.springframework.batch.repeat.RepeatStatus; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -@Configuration +//@Configuration @RequiredArgsConstructor public class SimpleJobConfiguration { diff --git a/spring-batch/basic/src/main/java/io/springbatch/basic/job/StartNextConfiguration.java b/spring-batch/basic/src/main/java/io/springbatch/basic/job/StartNextConfiguration.java new file mode 100644 index 00000000..7723874d --- /dev/null +++ b/spring-batch/basic/src/main/java/io/springbatch/basic/job/StartNextConfiguration.java @@ -0,0 +1,57 @@ +package io.springbatch.basic.job; + +import lombok.RequiredArgsConstructor; +import org.springframework.batch.core.Job; +import org.springframework.batch.core.Step; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +//@Configuration +@RequiredArgsConstructor +public class StartNextConfiguration { + + private final JobBuilderFactory jobBuilderFactory; + private final StepBuilderFactory stepBuilderFactory; + + @Bean + public Job batchJob1() { + return jobBuilderFactory.get("batchJob1") + .start(step1()) + .next(step2()) + .next(step3()) + .build(); + } + + @Bean + public Step step1() { + return stepBuilderFactory.get("step1") + .tasklet((contribution, chunkContext) -> { + System.out.println("step1 was executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } + + @Bean + public Step step2() { + return stepBuilderFactory.get("step2") + .tasklet((contribution, chunkContext) -> { + System.out.println("step2 was executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } + + @Bean + public Step step3() { + return stepBuilderFactory.get("step3") + .tasklet((contribution, chunkContext) -> { + System.out.println("step3 was executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } +} diff --git a/spring-batch/basic/src/main/java/io/springbatch/basic/job/ValidatorConfiguration.java b/spring-batch/basic/src/main/java/io/springbatch/basic/job/ValidatorConfiguration.java new file mode 100644 index 00000000..13a68356 --- /dev/null +++ b/spring-batch/basic/src/main/java/io/springbatch/basic/job/ValidatorConfiguration.java @@ -0,0 +1,70 @@ +package io.springbatch.basic.job; + +import lombok.RequiredArgsConstructor; +import org.springframework.batch.core.Job; +import org.springframework.batch.core.Step; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.job.DefaultJobParametersValidator; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@RequiredArgsConstructor +public class ValidatorConfiguration { + + private final JobBuilderFactory jobBuilderFactory; + private final StepBuilderFactory stepBuilderFactory; + + /* + validator() + + - Job 실행에 꼭 필요한 파라미터를 검증하는 용도 + - DefaultJobParametersValidator 구현체 지원, 인터페이스를 직접 구현 가능 + + DefaultJobParametersValidator 흐름 + SimpleJob -> JobParametersValidator -> JobParameters 검증 실패 -> JobParametersInvalidException + -> JobParameters 검증 성공 + */ + @Bean + public Job batchJob1() { + return jobBuilderFactory.get("batchJob1") + .start(step1()) + .next(step2()) + .next(step3()) +// .validator(new CustomJobParametersValidator()) + .validator(new DefaultJobParametersValidator(new String[]{"name", "date"}, new String[]{"count"})) + .build(); + } + + @Bean + public Step step1() { + return stepBuilderFactory.get("step1") + .tasklet((contribution, chunkContext) -> { + System.out.println("step1 was executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } + + @Bean + public Step step2() { + return stepBuilderFactory.get("step2") + .tasklet((contribution, chunkContext) -> { + System.out.println("step2 was executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } + + @Bean + public Step step3() { + return stepBuilderFactory.get("step3") + .tasklet((contribution, chunkContext) -> { + System.out.println("step3 was executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } +}