DataSource 커넥션 반환 누락 또는 수동 반환 필요

🧩 문제 현상 🔍 원인 분석 🛠 해결 방법 ✅ 적용 후 기대 효과 트랜잭션에 연결된 자원의 소유권은 Spring Batch Tasklet 트랜잭션 내 개별 항목 실패 시 커넥션 누수 방지 방법에서 이어집니다.

Spring Batch Tasklet 트랜잭션 내 개별 항목 실패 시 커넥션 누수 방지 방법

예외를 catch했다는 사실만으로 누수를 단정하지 않기 Tasklet 루프에서 예외를 잡고 다음 항목으로 진행하면 의도하지 않은 커밋이나 rollback-only 상태를 놓칠 수 있습니다. 그러나 catch 자체가 항상 커넥션 누수를 만드는 것은 아닙니다. Spring이 관리하는 트랜잭션과 직접 획득한 JDBC 자원의 소유권을 먼저 구분해야 합니다. 항목별 롤백의 전제 기본 TransactionTemplate의 REQUIRED는 바깥 트랜잭션에 참여할 더 읽기

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에서 커넥션 더 읽기