TaskLetStep의 StartLimit
TaskLetStep의 StartLimit은 해당 Step이 실행할 수 있는 최대 횟수를 설정하는 것이다. Step은 기본적으로 실패할 경우 다시 실행할 수 있다. 또한 StartAllow 메서드를 이용해서 성공한 Step도 항상 재실행하도록 설정할 수 있다. TaskLetStep의 StartLimit는 이처럼 새로 시작할 수 있는 Step의 최대 실행횟수를 설정하는 것이다.
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.tasklet((contribution, chunkContext) ->
{
System.out.println(">>> step1 has executed");
return RepeatStatus.FINISHED;
})
.startLimit(3)
.build();
}
코드는 위와 같은 형식으로 작성한다.
TaskLetStep의 StartLimit 설정 정보 저장
startLimit를 하게 되면, TaskLetStepBuilder가 가지고 있는 properties의 속성에 설정값을 넣을 수 있게 된다. 이 설정값만큼만 Step이 실행가능한 것을 알 수 있다.
TaskLetStep의 StartLimit 예제 코드 확인 → StratLimitExceedException 발생
@Bean
public Step step2() {
return stepBuilderFactory.get("step342")
.tasklet((contribution, chunkContext) ->
{
System.out.println(">>> step2 has executed");
throw new RuntimeException("abc");
})
.startLimit(2)
.build();
}
다음과 같이 Exception을 발생시키는 예제 코드를 작성해서, 실제 어떻게 동작하는지를 확인해보고자 한다. 고의로 2번의 예외가 발생하고 한 다음에, 세번째 수행했을 때의 DB 스키마를 살펴봤다.
Step이 실패했기 때문에 Job은 다시 실행이 가능하다. 따라서 2번까지는 RunTimeExeception(의도한 거)이 발생한 것이 확인된다. 그런데 세번째 실행에서는 StartLimitExcceded Exception이 발생한 것을 확인할 수 있다.
StepExecution은 Step342에 대해서 총 세번 실행에 대해 2개의 Execution만 생성되었다. 왜냐하면 StartLimit까지만 Step을 실행하기 때문에 세번째 실행 시도는 수행되지 않았기 때문이다.
'Spring > Spring Batch' 카테고리의 다른 글
Spring Batch : JobRepository 관련 정리 (0) | 2022.03.07 |
---|---|
Spring Batch : TaskLetStep의 AllowStartIfComplete() (0) | 2022.03.07 |
Spring Batch : TaskLetStep 관련 정리 (0) | 2022.03.07 |
Spring Batch : StepBuilderFactory (0) | 2022.03.05 |
Spring Batch : SImpleJob Incrementer 관련 (0) | 2022.03.05 |