강의

멘토링

커뮤니티

Inflearn Community Q&A

No author

This post's author information has been deleted.

Spring Batch

배치 작업 도중 실패할때

Written on

·

602

0

안녕하세요 강의 잘 보고있습니다.

 

데이터가 100개 있고, 청크 사이즈가 10이라고 할 때

 

0~9, 10 ~ 19 까지 성공하고 애플리케이션 문제 등으로 프로그램이 종료  혹은 실패가 되었을 때,

다시 0번부터 실행 안 하고, 20번 부터 실행을 하려면 어떻게 해야될까요? 몇번부터 몇번까지 실행했는지 기록하는 메타데이터용 테이블을 만들어서 기록해야되는 거 말고는 없나요??

(예를 들어 실패했을때 다시 실행하면, 실패한 곳부터 알아서 스프링 배치가 실행해주는..)

spring-bootspring-batch

Answer 2

1

leaven님의 프로필 이미지
leaven
Instructor

스프링 배치에서 ExecutionContext 객체를 통해서 데이터를 읽을 때 기본적으로 readcount 를 기록해 줍니다.

즉 청크 단위로 데이터를 읽어서 커밋이 성공한 것 까지의 개수를 인서트 해 주고 있는데 이 정보를 활용해서 여러가지 기능을 활용하는 것은 개발자의 몫입니다.

일단 최종적으로 커밋한 것 까지의 개수가 참조 가능하기 때문에 다시 배치를 재실행 했을 때 이미 성공한 지점은 건너뛰고 실패한 지점부터 다시 커밋이 가능하도록 구현할 수 있습니다.

근데 실패한 곳부터  스프링 배치가 알아서 스스로 실행해 주는 역할의 범위와 실패의 위치를 명확하게 정할 수 있는지는 의문입니다.

스프링 배치는 청크 단위로 데이터를 읽어서 청크 단위로 커밋을 해 주고 실패했을 경우 청크 단위로 롤백처리는 해줍니다.

거기에다 실패한 지점까지의 데이터 위치를 기록해 주고 이를 활용할 수 있는 InputStream 과 ExecutionContext 를 제공해 줍니다.

이 정도까지 기본 구현이 되어 있는 것도 대단한 지원이라고 개인적으로 생각합니다.

실제로 배치 프로그램을 만든다면 위의 사항을 구현하기도 그리 녹록치 않기 때문입니다.

0

감사합니다. 즉 데이터 청크단위로 데이터 롤백이 발생하기 때문에 청크 사이즈가 100인데, 50번째 데이터에서 롤백이 발생하면 readcount는 0이되니까 실질적으로 기록하기 힘들다는 뜻으로 해석하면 될까요?

No author

This post's author information has been deleted.

Ask a question