inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

Repeat

SimpleLimitExceptionHandler()를 Bean으로 만들어야 하는 이유가 뭔가요?

306

shany0.0bb

작성한 질문수 1

1

Repeat강의에서 SimpleLimitExceptionHandler를 설명해주실 때(43:29),

setExceptionHandler()에 SimpleLimitExceptionHandler객체를 Bean으로 만들어서 넣어줘야 정상 동작을 한다고 설명을 해주셨는대요.

Bean이 아닌 일반 객체로 넣어서, Process가 호출 될 때마다 새롭게 객체가 생성이 된다고 하더라도 limit이 3으로 들어가는건 변함이 없을 것 같은데,  limit 이 0이 되는 이유가 잘 이해가 안되네요.

spring-boot spring-batch

답변 1

5

정수원

네 

이 부분은 Bean 의 라이프 사이클에서 내부적인 처리가 별도로 진행이 되어야 하는 점이 차이가 있습니다.

SimpleLimitExceptionHandler 의 소스를 보면 아래와 같은 구문이 있습니다.

@Override
public void afterPropertiesSet() throws Exception {
if (limit <= 0) {
return;
}
Map<Class<? extends Throwable>, Integer> thresholds = new HashMap<>();
for (Class<? extends Throwable> type : exceptionClasses) {
thresholds.put(type, limit);
}
// do the fatalExceptionClasses last so they override the others
for (Class<? extends Throwable> type : fatalExceptionClasses) {
thresholds.put(type, 0);
}
delegate.setThresholds(thresholds);
}

즉 빈의 라이프 사이클 중에 afterPropertiesSet() 를 호출하게 되는데 여기서 예외가 발생할 경우 처리해야 하는 초기화 설정을 하게 됩니다.

이 처리가 되지 않으면 limit 값이 제대로 설정이 되지 않습니다.

그래서 SimpleLimitExceptionHandler 를 빈으로 정의해야만 afterPropertiesSet() 가 호출되기 때문에 그렇습니다. 

일반 객체로 생성하면 빈이 아니기 때문에 afterPropertiesSet() 가 호출이 되지 않아서 limit 값이 0 으로 되어 버립니다.

내부적으로 처리하는 부분이라 참고 하시면 될 것 같습니다.

스프링 배치 버전 질문

0

139

1

소스코드가 어디에 있나요?

0

122

2

트랜잭션 예외

0

101

1

질문이 있습니다.

0

139

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

145

2

여러 JOB 설정하는법

0

158

2

강의 자료 다른 방법 있을까요?

0

163

1

JobExecution과 JobExecutionContext와의 관계

0

197

2

특정 job만 실행

1

268

1

Batch 성능 질문

0

158

1

ItemReaderAdapter 종료

0

87

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

188

2

Spring Batch 배포 질문

0

253

2

spring batch 버전

0

238

2

retry count 관련 질문

0

183

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

341

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

242

2

Multithread step과 AsyncItemProcessor

0

208

2

job 재실행

0

259

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

191

1

Multi-threaded-step과 Partitioning 차이 확인

0

183

2

jdbcCursorReader, jdbcPagingReader 질문

0

149

1

step muti-thread 질문

0

114

1

itemSteam open update close 질문

0

117

1