#11 spring batch: Transition - BatchStatus, ExitStatus, FlowExecutionStatus
This commit is contained in:
@@ -0,0 +1,106 @@
|
|||||||
|
package io.springbatch.basic.flow;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.batch.core.ExitStatus;
|
||||||
|
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 BatchStatusExitStatusConfiguration {
|
||||||
|
|
||||||
|
private final JobBuilderFactory jobBuilderFactory;
|
||||||
|
private final StepBuilderFactory stepBuilderFactory;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Transition
|
||||||
|
|
||||||
|
- 배치 상태 유형
|
||||||
|
- BatchStatus
|
||||||
|
- JobExecution 과 StepExecution 의 속성으로 Job 과 Step 의 종료 후 최종 결과 상태
|
||||||
|
- SimpleJob
|
||||||
|
- 마지막 Step 의 BatchStatus 값을 Job 의 최종 BatchStatus 값으로 반영
|
||||||
|
- Step 이 실패할 경우 해당 Step 이 마지막 Step 이 된다.
|
||||||
|
- FlowJob
|
||||||
|
- Flow 내 Step 의 ExitStatus 값을 FlowExecutionStatus 값으로 저장
|
||||||
|
- 마지막 Flow 의 FlowExecutionStatus 값을 Job 의 최종 BatchStatus 값으로 반영
|
||||||
|
- COMPLETED, STARTING, STARTED, STOPPING, STOPPED, FAILED, ABANDONED, UNKNOWN
|
||||||
|
- ABANDONED 는 처리를 완료했지만 성공하지 못한 단계와 재시작시 건너 뛰어야하는 단계
|
||||||
|
|
||||||
|
- ExitStatus
|
||||||
|
- JobExecution 과 StepExecution 의 속성으로 Job 과 Step 의 실행 후 어떤 상태로 종료 되었는지 정의
|
||||||
|
- 기본적으로 ExitStatus 는 BatchStatus 와 동일한 값으로 설정 된다.
|
||||||
|
- SimpleJob
|
||||||
|
- 마지막 Step 의 ExitStatus 값을 Job 의 최종 ExitStatus 값으로 반영
|
||||||
|
- FlowJob
|
||||||
|
- Flow 내 Step 의 ExitStatus 값을 FlowExecutionStatus 값으로 저장
|
||||||
|
- 마지막 Flow 의 FlowExecutionStatus 값을 Job 의 최종 ExitStatus 값으로 반영
|
||||||
|
- UNKNOWN, EXECUTING, COMPLETED, NOOP, FAILED, STOPPED
|
||||||
|
|
||||||
|
- FlowExecutionStatus
|
||||||
|
- FlowExecution 의 속성으로 Flow 의 실행 후 최종 결과 상태가 무엇인지 정의
|
||||||
|
- Flow 내 Step 이 실행되고 나서 ExitStatus 값을 FlowExecutionStatus 값으로 저장
|
||||||
|
- FlowJob 의 배치 결과 상태에 관여
|
||||||
|
- COMPLETED, STOPPED, FAILED, UNKNOWN
|
||||||
|
*/
|
||||||
|
// @Bean
|
||||||
|
// public Job batchJob() {
|
||||||
|
// return jobBuilderFactory.get("batchJob")
|
||||||
|
// .incrementer(new RunIdIncrementer())
|
||||||
|
// .start(step1())
|
||||||
|
// .next(step2())
|
||||||
|
// .next(step3())
|
||||||
|
// .build();
|
||||||
|
// }
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public Job batchJob() {
|
||||||
|
return jobBuilderFactory.get("batchJob")
|
||||||
|
.incrementer(new RunIdIncrementer())
|
||||||
|
.start(step1())
|
||||||
|
.next(step2())
|
||||||
|
.on("FAILED")
|
||||||
|
.to(step3())
|
||||||
|
.end()
|
||||||
|
.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");
|
||||||
|
contribution.setExitStatus(ExitStatus.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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,7 +12,7 @@ import org.springframework.batch.repeat.RepeatStatus;
|
|||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
@Configuration
|
//@Configuration
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class StartNextConfiguration {
|
public class StartNextConfiguration {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user