반응형
728x90
반응형
Job 재실행
Job의 재실행에 대해서는 아래 포스팅을 참고하자.
https://devfunny.tistory.com/680
JOB을 재실행하면 FAILED 상태로 끝난 STEP만 실행 대상이 되는데, allowStartIfComplete(true)를 사용하여 COMPLETED로 끝난 STEP도 재실행 대상에 포함시킬 수 있다.
예제코드
- AllowStartConfiguration.java
package com.spring.batch.step;
import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.support.ListItemReader;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
import java.util.List;
/*
--job.name=limitAllowStepJob
*/
@Configuration
@RequiredArgsConstructor
public class AllowStartConfiguration {
// job 생성
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job limitAllowStepJob() {
return this.jobBuilderFactory.get("limitAllowStepJob")
.start(limitAllowStepStep1())// COMPLETED (재시작에 포함되지 않음) -> allowStartIfComplete 추가 후 포함됨
.next(limitAllowStepStep2())// FAILED (재시작의 대상)
.build();
}
@Bean
public Step limitAllowStepStep1() {
return stepBuilderFactory.get("limitAllowStepStep1")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("limitAllowStepStep1");
return RepeatStatus.FINISHED;
}
})
.allowStartIfComplete(true) // COMPLETED 되도 재실행에 포함
.build();
}
@Bean
public Step limitAllowStepStep2() {
return stepBuilderFactory.get("limitAllowStepStep2")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("limitAllowStepStep2");
throw new RuntimeException("step2 was failed");
//return RepeatStatus.FINISHED;
}
})
.build();
}
}
Step1 이 COMPLETED 상태로 종료했지만, 설정값에 의해 Job이 재실행될때 Step1 도 다시 수행된다.
.allowStartIfComplete(true)
반응형
'Coding > Spring Batch' 카테고리의 다른 글
[SpringBatch] @JobScope와 @StespScope 개념과 실행 예제 (0) | 2022.03.06 |
---|---|
[SpringBatch] BATCH_JOB_EXECUTION, BATCH_STEP_EXECUTION의 EXIT_CODE, STATUS 컬럼 셋팅 정보 (0) | 2022.02.17 |
[SpringBatch] Incrementer() Custom : 직접 별도 클래스 생성하기 (0) | 2022.02.08 |
SpringBatch JobLauncherApplicationRunner Job Name 을 지정하여 실행시키기 (동시에 Job 여러개 지정하여 실행시키기) (0) | 2022.01.24 |
SpringBatch에서 JobLauncher 동기/비동기 실행 (0) | 2022.01.21 |