inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

ItemReaderAdapter 질문

39

stonesnail1

작성한 질문수 2

0

수업을 듣고 ItemReaderAdapter를 사용해봤는데 service의 리턴값이 List<객체> 인 경우에는 데이터를 못 불러오더라구요 어떻게 해야될까요

 

또 iterator를 사용해봤는데 iterator가 초기화가 안되더라구요,,

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
stonesnail1님, 질문해주셔서 감사합니다.

ItemReaderAdapter를 사용할 때, service의 리턴값이 List<객체> 형태라면 각 데이터를 순차적으로 처리할 수 있도록 설정이 필요합니다. 일반적으로 ItemReader는 데이터를 하나씩 반환해야 하므로, List를 반환받을 경우에는 이를 한 개씩 가져오는 로직으로 변환해야 합니다.

만약 iterator 초기화 문제를 겪고 있으면, 다음과 같은 방법으로 문제를 해결할 수 있습니다:
- ItemReaderAdapter에서 List를 리턴받고, 이를 iterator와 연동하여 한 개씩 반환하는 ItemReader를 구현합니다.
- 서비스 호출 시 List를 반환하고, 반환된 리스트를 기반으로 하는 Iterator를 생성합니다. 이후, 이 Iterator를 매 번 호출 시 하나의 객체만 제공하게 설정해 보세요.

아래는 ItemReaderAdapter를 활용한 구현 예시입니다:

public class CustomItemReader implements ItemReader<MyObject> {

    private Iterator<MyObject> iterator;

    @Autowired
    public CustomItemReader(MyService myService) {
        List<MyObject> items = myService.getItems(); // service 호출
        this.iterator = items.iterator(); // 리스트를 iterator로 변환
    }

    @Override
    public MyObject read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
        if (iterator != null && iterator.hasNext()) {
            return iterator.next();
        }
        return null; // 데이터가 더 이상 없으면 null 반환
    }
}

이 방법은 ItemReaderAdapter 대신 직접적인 ItemReader 구현체를 작성하여 문제를 해결하는 예시입니다. 상황에 따라 다르게 적용해야 할 수 있으니, 프로젝트에 적절히 맞춰 사용해 보시길 바랍니다.

추가로 더 복잡한 환경이거나 다른 설정이 필요하다면, Spring Batch 문서를 참조하여 심화된 내용을 학습해 보는 것도 좋은 방법입니다.

도움이 되셨길 바랍니다! 추가 질문이 있으시면 언제든지 말씀해 주세요.

강의 추천해주세요

2

25

1

케이테스트 서버 운영 방법

2

44

1

실습 파일 업로드 안된 것 같아요 이거 강사님한테 보여주세요

1

24

2

젠킨스버전과 플러그인설치

1

36

2