inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

DB - Cursor & Paging 이해

ItemReaderAdapter 종료

78

stonesnail1

작성한 질문수 2

0

ItemReaderAdapter를 사용할 일이 있어서 사용하던 중

조회해온 데이터가 null 일 경우에 배치가 종료가 되어야는데 종료가 안되고 무한히 반복됩니다.. 무엇이 문제일까요??

reader(itemReader) .writer(itemWriter) .faultTolerant() .skip(Throwable.class) //모든 예외조건에 대해서 skip 실행 .skipLimit(Integer.MAX_VALUE) .allowStartIfComplete(false) .build();

if (객체!= null) {

adapter.setTargetObject(this);

adapter.setTargetMethod("");

adapter.setArguments(new Object[]{object});

return adapter; }

else {

return null;

} }

spring-boot spring-batch

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

stonesnail1님의 질문에 대해 설명드리겠습니다. ItemReaderAdapter를 사용할 경우, null 값을 반환할 때 배치가 종료되지 않고 무한히 반복될 수 있는 이유는 정확하게 종료 조건이 설정되지 않았기 때문입니다.

스프링 배치에서 ItemReadernull 값을 반환하면 그 시점이 배치의 종료 조건으로 인식됩니다. 하지만, faultTolerant() 기능과 skip 설정이 포함된 경우, 모든 예외를 스킵하도록 설계되어 있다면 null 반환이 오히려 배치 종료로 인식되지 않게 되거나 재처리될 수 있습니다. 이는 특히 무한 루프 문제가 발생하는 원인이 될 수 있습니다.

해결책은 ItemReader에서 null을 반환하면, chunk 기반의 처리 내에서 더 이상 읽을 데이터가 없는 신호로 기술되어야 합니다. 다음과 같은 방식을 고려해볼 수 있습니다:

  1. 종료 조건 명확히: null 반환 시 무조건 배치 종료가 이루어지도록 확실히 체크해야 합니다.

  2. Exception 처리 활용: null 값을 만나면 특정 Exception을 발생시키고 이 Exception을 skip 목록에서 제거하여 처리할 수 있습니다. Exception을 던진 후 이를 Catch 하도록 설계하여 자연스럽게 배치가 종료되도록 합니다.

  3. Log 추가 및 디버깅: null 이외의 값들이 왜 null 로 이해되지 않는지, 즉 반환 시 null 처리가 되지 않는지를 디버깅으로 확인합니다. 로그를 통해 어느 단계에서 null이 발생하는지 확인이 필요합니다.

기존 비슷한 질문과 답변들이 도움이 될 수 있습니다. 다음 유사한 해결 방법이 논의된 링크를 참고해 주실 수 있습니다:

위 링크에서는 JpaItemReader의 문제지만, 비슷한 개념으로 Null 처리 및 ItemReader의 종료 처리 문제를 해결할 수 있는 방법을 제시합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

스프링 배치 버전 질문

0

119

1

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

0

95

2

트랜잭션 예외

0

90

1

질문이 있습니다.

0

128

2

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

0

124

2

여러 JOB 설정하는법

0

148

2

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

0

154

1

JobExecution과 JobExecutionContext와의 관계

0

185

2

특정 job만 실행

1

247

1

Batch 성능 질문

0

151

1

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

0

178

2

Spring Batch 배포 질문

0

245

2

spring batch 버전

0

235

2

retry count 관련 질문

0

170

2

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

0

327

2

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

0

233

2

Multithread step과 AsyncItemProcessor

0

201

2

job 재실행

0

250

2

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

0

182

1

Multi-threaded-step과 Partitioning 차이 확인

0

171

2

jdbcCursorReader, jdbcPagingReader 질문

0

142

1

step muti-thread 질문

0

106

1

itemSteam open update close 질문

0

109

1

@JopScope, stepScope 지연 초기화 관련 질문

1

124

1