문제 현상
원인 분석
해결 방법
적용 후 기대 효과
DataSource
Spring Batch Tasklet 트랜잭션 내 개별 항목 실패 시 커넥션 누수 방지 방법
문제 요약 Tasklet 내부에서 루프를 돌며 개별 항목을 처리할 때, 예외가 발생해도 catch 블럭 내에서 로그만 찍고 다음 항목으로 진행하는 방식은 커넥션 반환이 제대로 되지 않아 HikariCP 커넥션 풀에서 누수가 발생할 수 있음. 개선 방안 예제 코드 예외 발생 시 명시적 커넥션 반환 효과
Spring Batch에서 slave DB 커넥션 반환 문제와 MyBatis + Hikari 트랜잭션 실전 가이드
문제 인식
핵심 원인
해결 방법
1. TransactionTemplate으로 slave 트랜잭션 분리 List<Data> list = slaveTxSupport.read(() -> slaveMapper.selectByCondition(paramA, paramB));
2. chunk 방식에서 ListItemReader에 적용 가능 @Bean@StepScopepublic ListItemReader<Entity> reader() { return new ListItemReader<>( slaveTxSupport.read(() -> mapper.selectList(param)) );}
3. 커넥션 반환 여부 확인
MyBatis Interceptor에서 커넥션 더 읽기