Spring Batch

Spring Batch - JdbcCursorItemReader

jaewoo 2022. 12. 22. 20:03

 

JDBC를 조회하는 방법은 크게 두가지이다.

 

1. Cursor 기반 조회(ResultSet에 cursor)

 - 배치 처리가 완료될때까지 DB Connection이 연결된다.

 - DB Connection 빈도가 낮아 성능이 좋은 반면, 긴 Connection 시간이 필요하다.

 - 하나의 Connection에서 처리 되기 때문에 Thread Safe하지 않다.

2. Paging  기반 조회

- 페이징 단위로 DB Connection 을 연결

- DB Connection 빈도가 높아 비교적 성능이 낮은 반면, 짧은 Connection 유지시간 필요

- 페이징 단위의 결과만 메모리에 할당하기 때문에[ 비교적 더 적은 메모리를 사용한다.

 

각각 JdbcCursorItemReader, JdbcPagingItemReader를 사용한다.

두 클래스 모두 객체에  beanMapper, rowMapper 설정이 가능하다.

 

private JdbcCursorItemReader<Person> jdbcCursorItemReader() throws Exception{
	JdbcCursorItemReader<Person> itemReader = 
    		new JdbcCursorItemrReaderBuilder<Person>().name("jdbcCursorItemReader")
            	.dataSource(dataSource)
                .sql("select id, name, age, address from person")
                .rowMapper((rs, rowNum) -> new Person(rs.getInt(1),
                			rs.getString(2),
                            rs.getString(3),
                            rs.getString(4))).build();
                            
        itemReader.afterPropertiesSet();
        return itemReader;

dataSource는 스프링 빈을 주입받아 사용하는 dataSource이다.