상태값이 이미 정의 되어있다.
Complete Stopped Failed Executing Unknow Noop
이미 정의된 것 외에도 사용자가 직접 지정하여 사용할 수 있다.
StepExecutionListener의 afterStep() 메서드에서 Custom exitCode를 생성 후 새로운 ExitStatus 반환 가능
getCompositieListener 를 호출하면
우리가 StepExecutionListener을 구현한 구현체가 호출이 된다
package io.springbatch.springbatch.customExitStatus;
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.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@RequiredArgsConstructor
@Configuration
public class CustomExitStatusConfiguration {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job customExitStatusJob() {
return jobBuilderFactory.get("customExitStatusJob")
.start(customExitStatusStep1())
.on("FAILED")
.to(customExitStatusStep2())
.on("PASS")
.stop()
.end()
.build();
}
@Bean
public Step customExitStatusStep1() {
return stepBuilderFactory.get("customExitStatusStep1")
.tasklet((stepContribution, chunkContext) -> {
System.out.println("custom exit status step1 was executed");
stepContribution.getStepExecution().setExitStatus(ExitStatus.FAILED);
return RepeatStatus.FINISHED;
})
.build();
}
@Bean
public Step customExitStatusStep2() {
return stepBuilderFactory.get("customExitStatusStep2")
.tasklet((stepContribution, chunkContext) -> {
System.out.println("custom exit status step2 was executed");
return RepeatStatus.FINISHED;
})
.build();
}
}
step1 - batchstatus (failed), exitStatus (failed)
step2 - batchstatus (completed), exitstatus (completed)
job - batchstatus (failed), exitstatus (failed)
step1은 아무런 이상이 없고
jobExecution은 맨 마지막의 step 상태값이 저장되기 때문에 step1은 jobExecution의 영향을 주지 않는다.
step2는 completed로 종료 되었는지만, step2가 pass 할 때에 대해서만 처리를 해 놓았지
completed 로 종료되었을 때 설정을 지정하지 않았기 때문에 jobexecution의 상태값이 failed이다.
상태값을 바꾸는 것은 AbstractStep에서 확인할 수 있다.
'강의 > 스프링배치' 카테고리의 다른 글
Flowjob architecture (0) | 2023.01.30 |
---|---|
스프링 배치 - JobExecutionDecider (0) | 2023.01.29 |
스프링 배치 실행 - Transition (0) | 2023.01.27 |
SpringBatch - Transition - 배치상태 유형 (BatchStatus / ExitStatus / FlowExecutionStatus) (0) | 2023.01.25 |
Job and flow (0) | 2023.01.25 |