본문 바로가기

Spring Batch

패스트캠퍼스 챌린지 23일차 - Spring Batch 5

📌 spring-batch 5

✔️ Cursor 기반 조회

  • 배치 처리가 모두 완료될 때까지 DB와의 연결을 유지하는 방식이다.
  • DB에 연결을 시도하는 빈도가 낮아 성능이 좋지만 DB와의 긴 연결로 리소스 낭비가 될 수 있다.
  • 하나의 Connection 안에서 처리되기 때문에 Thread safe하지 않다.
  • 모든 결과를 메모리에 할당하므로 메모리 효율이 좋지 않다.

 

✔️ JDBC의 ResultSet이 Cursor 방식이다. (Cursor를 구현)

  • 연결을 유지한 채로 Cursor의 위치를 한 칸씩 이동하며 데이터를 뽑아 결과를 만들어낸다.

 

✔️ JdbcCursorItemReader

  • open() : DB 연결 (Connection)
  • update() : Cursor 한 칸씩 이동하며 데이터를 뽑는다.
  • close() : DB 연결종료

 

✔️ Paging 기반 조회

  • 페이징 단위로 DB Connection을 가져온다.
  • DB Connection의 빈도가 높아 성능이 낮지만 짧은 Connection 유지시간을 가질 수 있다.
  • 페이징 단위로 매번 Connection을 얻기 때문에 Thread safe 하다.
  • 패이징 단위로 결과만 메모리에 할당하기 때문에 비교적 적은 메모리 사용 가능하다.
    ex)
  • 1000개 데이터를 100개씩 10번에 나누어 쿼리를 날린다.
  • 총 10번의 커넥션 연결/종료가 발생한다.

 

✔️ JdbcCursorItemReader
생성: (빌더) JdbcCursorItemReaderBuilder<T>

.name() // ItemReader 이름 지정
.dataSource // DI받은 DataSouce 설정
.sql() // 조회쿼리 
.rowMapper((rs, rowNum) -> new Person()) // rs: ResultSet

 

✔️ JPA 기반 ItemReader
EntityManagerFactory는 DI 받아야 한다.

quertString 부분에 jpql을 작성해서 배치대상 객체를 테이블에서 가져온다.

JpaCursorItemReaderBuilder<Entity>() 
    .name("jpaCursorItemReader")
    .entityManagerFactory(emf)
    .queryString("jpql")
    .build();
itemReader.afterPropertiesSet();

 


👍  수강인증

 

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.