📌 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
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Spring Batch' 카테고리의 다른 글
| 패스트캠퍼스 챌린지 25일차 - Spring Batch 7 (0) | 2021.09.30 |
|---|---|
| 패스트캠퍼스 챌린지 24일차 - Spring Batch 6 (0) | 2021.09.29 |
| 패스트캠퍼스 챌린지 22일차 - Spring Batch 4 (0) | 2021.09.27 |
| 패스트캠퍼스 챌린지 21일차 - Spring Batch 3 (0) | 2021.09.26 |
| 패스트캠퍼스 챌린지 20일차 - Spring Batch 2 (0) | 2021.09.25 |