인프런 커뮤니티 질문&답변

홍찬희님의 프로필 이미지
홍찬희

작성한 질문수

스프링 배치

ItemStream

ItemStreamReader 중복실행관련 질문

작성

·

164

0

저는 강의를 들으면서, 6번째에서 실패하면 6,7,8,9 이렇게 잡을 실행한다고 이해했는데

 

아래 코드와 같이 this.index == 7로 바꿨을때 6부터 시작하는게 아닌 5부터 시작하는데 의도한 설명이 맞을까요??

    @Override
    public String read() {
        String item = null;
        if (this.index < this.items.size()) {
            System.out.println("read = " + index);
            item = this.items.get(index++);
        }

        if (this.index == 7 && !restart) {
            throw new RuntimeException("Restart is required!");
        }
        return item;
    }

// 1번째 실행
open
update
read = 0
read = 1
read = 2
read = 3
read = 4

update
read = 5
read = 6
Exception : Restart is required!

// 2번째 실행
open
update
read = 5
read = 6
read = 7
read = 8
read = 9

update
update

가장 최근에 실패한 지점부터 시작한다고 언급해주셨는데, 가장 최근에 실패한 Chunk부터 시작하는 것 같아서 원래 강사님께서 말씀하시려던 부분이 가장 최근에 실패한 Chunk부터 재실행 한다는게 맞을까요??

맞다면, 중복실행이 될 수 있겠네요

 

read( ) 메서드에서는 ExecutionContext에 put을 하고 있는게 아니라서 클래스 내부변수 this.index가 변경되더라도 실제 DB에는 적용되지 않는 것 같네요.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 홍찬희님의 질문에 대해 명확한 답변을 드리기 위해선 질문하신 내용과 직접 관련된 정보가 제공된 문서가 필요합니다. 하지만 제공해주신 정보에는 ItemStreamReader의 중복 실행과 관련된 구체적 내용이 포함되어 있지 않습니다. 스프링 배치와 관련된 질문은 스프링 공식 문서 또는 스프링 배치 관련 공식 문서에서 더 자세한 정보를 찾을 수 있으니, 해당 자료를 참고해보시는 것도 좋을 것 같습니다.

스프링 배치의 특정 구현체나 부분에서 예상치 못한 동작이 발생할 때는 해당 구현의 내부 로직을 자세히 살펴보고, 필요하다면 스프링 배치의 공식 문서나 해당 기능에 관련된 커뮤니티의 질문과 답변을 찾아보는 것이 해결책을 찾는 데 도움이 될 수 있습니다. 또한, 실패 지점에서 재시작하는 로직에 대하여는 스프링 배치가 제공하는 ExecutionContext를 통해 상태 관리를 하는 것이 중요하므로, ExecutionContext에 상태 정보를 저장하고 관리하는 방법에 대해서도 살펴보시기 바랍니다.

직접적으로 도움을 드리지 못해 죄송합니다. 추가적인 질문이 있으시면 언제든지 문의해주세요.

홍찬희님의 프로필 이미지
홍찬희

작성한 질문수

질문하기