<TIL> 157. Spring batch | cursor vs paging & MyBatisCursorItemReader

YUJIN LEE·2023년 11월 21일
0

개발log

목록 보기
148/149

Spring batch 대표 reader

Cursor

JDBC ResultSet 기본기능

JDBC(Java Database Connectivity)
자바 프로그램에서 데이터베이스와의 연결을 관리하고 SQL 쿼리를 실행하기 위한 자바 API

ResultSet?
JDBC에서 쿼리 결과를 나타내는 인터페이스
ResultSet 객체는 데이터베이스에서 실행된 SELECT 쿼리 집합을 나타냄
행과 열의 형태 -> 행 : 레코드 열 : 레코드의 필드

ResultSet이 open 될 때마다 database의 데이터 return
DB 커넥션 후 데이터를 Streaming 해서 보냄.
Cursor를 한칸씩 옮기며 데이터를 가져옴.

Cursor기반 ItemReader 구현체

  • JdbcCursorItemReader
  • HibeernateCursorItemReader
  • StoredProcedureItemReader

MyBatisCursorItemReader

  • .afterPropertiesSet()
    spring bean의 초기화를 위해 InitializingBean 상속 메서드
    빈의 속성들이 설정된 후 이 메소드 호출되어 빈을 추가로 초기화할 수 있다. (객체 초기화)
    --> 의존관계가 끝나면 호출해주겠다는 의미

  • .setSaveState(true)
    빈의 상태를 저장할지 여부 지정.
    빈의 상태를 저장하는것은 스프링 배치에서 일괄 처리 작업을 수행하는 동안 빈의 상태를 유지하고,
    실패시 다시 시작하는데 도움. -> 작업이 중간에 중단되거나 실패한 경우 이전상태로부터 다시 시작

Paging

페이지라는 Chunk로 Database에서 데이터 검색
페이지 단위(PageSize = ChunkSize)로 한번에 데이터 조회
여러 쿼리를 실행해 각 쿼리가 지정한 PageSize만큼 한번에 가져옴
페이징은 offset(행번호), 페이지에서 반환할 행 수 (limit) 을 지정
-> Spring batch에서는 offset, limit을 pageSize에 맞게 자동 생성
--> 하지만 각 쿼리는 개별적으로 실행
---> 각 페이지마다 새로운 쿼리를 실행하므로 order by가 중요하다.

Paging기반 ItemReader 구현체

  • JdbcPagingItemReader
  • HibernatePagingItemReader
  • JpaPagingItemReader

Spring batch => Chunk 지향 처리.
Chunk 단위로 트랜잭션 다룸. -> 롤백허용
읽고 처리해야할 아이템이 많을때, 트랜잭션을 한번에 이어가는 것 보다 일정 주기로 여러번 실행하는 것이 안정적.
Cursor는 하나의 Connection으로 Batch가 끝날때까지 사용되어 Batch가 끝나기전에
Database와 application의 Connection이 먼저 끊어질 수 있어 위험

profile
인정받는 개발자가 되고싶습니다.

0개의 댓글