728x90
반응형
SMALL

ItemReaderChunk Processing에서 데이터를 제공하는 인터페이스이다. ItemReader는 반드시 read 메서드를 구현해야 한다. read 메서드를 통해서, ItemProcessor 또는 ItemWriter에게 데이터를 제공한다. read 메서드가 null을 반환하면 더이상 데이터가 없고 Step을 끝내겠다고 판단한다. 그렇기 때문에 처음부터 null을 반환했다고 하더라도 에러가 나지는 않는다. 단, 데이터가 없으니 바로 Step이 종료될 것이다.

 

@FunctionalInterface
public interface ItemReader<T> {
    @Nullable
    T read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException;
}
  • ItemReader를 보면 T 타입의 단일 데이터 1개를 반환한다. 더 이상 읽을 수 없을 때까지(null이 나올 때까지) 반복한다. 
  • ItemReader의 데이터 조회 방식은 크게 두 가지로 나눌 수 있다.
    • 정말 1개씩 데이터를 가져와서 결과로 주는 방식
    • 한번에 대량으로 가져오고 가져온 데이터에서 하나씩 빼주는 방식 (단 대량으로 가져올 때 최대 가져올 수 있는 개수는 정해져 있어야 한다)

ItemReader가 가져오는 데이터는 정말 다양하게 있을 수 있지만 대개는 File, DB 데이터 정도이다. 그래서 Spring Batch는 우리를 위해 자주 사용될 법한 ItemReader들을 미리 만들어 두었다.

 

  • FlatFileItemReader → 보통 구분자로 나누어져 있는 파일을 읽는다. 대표적인 예로 CSV 파일
  • JdbcCursorItemReader → JDBC Cursor로 조회하여, 결과를 ObjectMapping해서 넣어주는 방식
  • JdbcPagingItemReader → 페이징해서 데이터베이스에서 데이터를 가져온다.
  • JpaPagingItemReader → 위에랑 똑같은데 JPA를 사용해서 페이징해서 데이터베이스에서 데이터를 가져온다.
  • RepositoryItemReader → Repository에서 구현한 메서드의 이름을 넣는 방식이다. 그래서 해당 메서드를 통해 데이터를 가져오는 것이다. 이때 주의할 점은, Repository에서 구현한 메서드의 인자에 Pageable이 포함되어 있어서, Pagination을 지원하는 상황이어야 한다. 아래가 그 예시다.
@Repository
public interface PointRepository extends JpaRepository<Point, Long>  {
    Page<Point> findByAmountGreaterThan(Long amount, Pageable pageable);
}
@Bean
@StepScope
public RepositoryItemReader<Point> pointRepositoryItemReader(PointRepository pointRepository) {
    return new RepositoryItemReaderBuilder<Point>()
            .repository(pointRepository)
            .methodName("findByAmountGreaterThan")
            .pageSize(1000)
            .maxItemCount(1000)
            .arguments(List.of(BigInteger.valueOf(100)))
            .sorts(Collections.singletonMap("id", Sort.Direction.DESC))
            .build();
}

 

정리를 하자면

ItemReaderChunk Processing을 구현할 때 데이터를 가져오는 녀석이다. 그리고 스프링 배치는 자주 사용되는 ItemReader들을 미리 우리를 위해 구현해 두었다. 이제 ItemProcessor를 알아보자!

728x90
반응형
LIST

'Spring Batch' 카테고리의 다른 글

ItemWriter  (1) 2024.10.09
ItemProcessor  (2) 2024.10.09
Chunk Processing  (5) 2024.10.09
Tasklet  (0) 2024.10.09
Step  (2) 2024.10.09

+ Recent posts