Spring Batch - 07. JobExecution 와 JOB_EXECUTION 테이블

출처

목차

JobExecution

Job 실행 중에 발생한 정보들을 저장하고 있는 객체, JobInstance 에 대한 시도를 의미하는 객체로서 1:N 의 관계를 갖는다.
BATCH_JOB_EXECUTION 테이블과 매핑되고 로서 JobInstance 에 대한 성공 / 실패 내역을 관리한다.

JobExecution 객체는 JobInstance 가 실행될 때 마다 생성됩니다. JobExecution 객체는 Job 의 실행 결과 FAILED 또는 COMPLETED 등의 값을 관리합니다.

JobExecution 의 실행 결과가 COMPLETED 면 JobInstance 실행이 완료된 것으로 간주해 동일한 JobParameter 를 이용한 재실행이 불가능합니다.

JobExecution 의 실행 결과가 FAILED 면 JobInstance 실행이 완료되지 않은 것으로 간주해 동일한 JobParameter 를 이용한 재실행이 가능합니다. 또한, JobExecution 의 실행 결과가 COMPLETED 될 때까지 하나의 JobInstance 내에서 여러 번의 시도가 생길 수 있다.

@RequiredArgsConstructor
@Configuration
public class JobExecutionConfiguration {

private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;

@Bean
public Job BatchJob() {
return this.jobBuilderFactory.get("Job")
.start(step1())
.next(step2())
.build();
}

@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {

JobExecution jobExecution = contribution.getStepExecution().getJobExecution();
System.out.println("jobExecution = " + jobExecution);

System.out.println("step1 has executed");
return RepeatStatus.FINISHED;
}
})
.build();
}

@Bean
public Step step2() {
return stepBuilderFactory.get("step2")
.tasklet((contribution, chunkContext) -> {
// throw new RuntimeException("JobExecution has failed");
System.out.println("step2 has executed");
return RepeatStatus.FINISHED;
})
.build();
}
}

Share