diff --git a/spring-batch/basic/src/main/java/io/springbatch/basic/flow/SimpleFlowConfiguration.java b/spring-batch/basic/src/main/java/io/springbatch/basic/flow/SimpleFlowConfiguration.java index 9e4af8f9..a495d320 100644 --- a/spring-batch/basic/src/main/java/io/springbatch/basic/flow/SimpleFlowConfiguration.java +++ b/spring-batch/basic/src/main/java/io/springbatch/basic/flow/SimpleFlowConfiguration.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 SimpleFlowConfiguration { diff --git a/spring-batch/basic/src/main/java/io/springbatch/basic/flow/SimpleFlowExConfiguration.java b/spring-batch/basic/src/main/java/io/springbatch/basic/flow/SimpleFlowExConfiguration.java new file mode 100644 index 00000000..347ac674 --- /dev/null +++ b/spring-batch/basic/src/main/java/io/springbatch/basic/flow/SimpleFlowExConfiguration.java @@ -0,0 +1,140 @@ +package io.springbatch.basic.flow; + +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.builder.FlowBuilder; +import org.springframework.batch.core.job.flow.Flow; +import org.springframework.batch.core.launch.support.RunIdIncrementer; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@RequiredArgsConstructor +public class SimpleFlowExConfiguration { + + private final JobBuilderFactory jobBuilderFactory; + private final StepBuilderFactory stepBuilderFactory; + + /* + flow1 (step1, step2) COMPLETED -> flow2 (flow3 (step3, step4), step5, step6) + FAILED -> flow3 (step3, step4) + */ + @Bean + public Job batchJob() { + return jobBuilderFactory.get("batchJob") + .incrementer(new RunIdIncrementer()) + .start(flow1()) + .on("COMPLETED") + .to(flow2()) + .from(flow1()) + .on("FAILED") + .to(flow3()) + .end() + .build(); + } + + @Bean + public Flow flow1() { + + FlowBuilder flowBuilder = new FlowBuilder<>("flow1"); + + flowBuilder + .start(step1()) + .next(step2()) + .end(); + + return flowBuilder.build(); + } + + @Bean + public Flow flow2() { + + FlowBuilder flowBuilder = new FlowBuilder<>("flow2"); + + flowBuilder + .start(flow3()) + .next(step5()) + .next(step6()) + .end(); + + return flowBuilder.build(); + } + + @Bean + public Flow flow3() { + + FlowBuilder flowBuilder = new FlowBuilder<>("flow3"); + + flowBuilder + .start(step3()) + .next(step4()) + .end(); + + return flowBuilder.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"); + throw new RuntimeException("step2 was failed"); +// 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(); + } + + @Bean + public Step step4() { + return stepBuilderFactory.get("step4") + .tasklet((contribution, chunkContext) -> { + System.out.println("step4 was executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } + + @Bean + public Step step5() { + return stepBuilderFactory.get("step5") + .tasklet((contribution, chunkContext) -> { + System.out.println("step5 was executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } + + @Bean + public Step step6() { + return stepBuilderFactory.get("step6") + .tasklet((contribution, chunkContext) -> { + System.out.println("step6 was executed"); + return RepeatStatus.FINISHED; + }) + .build(); + } +}