질문 시나리오 Spring Batch Tasklet 안에서 slaveMapper를 사용하는 다음 코드처럼: slaveTxSupport.read(() -> slaveMapper.selectSomething());slaveTxSupport.read(() -> slaveMapper.selectAnotherThing()); 이 경우: 이 궁금증에 대한 답을 정리합니다.
결론 요약 항목 설명 TransactionTemplate.read(…) 호출마다 트랜잭션 생성됨
맞습니다 각 트랜잭션은 독립적인 커넥션 사용
맞습니다 첫 번째 호출이 끝난 시점에 커넥션 반환되는가
반환됨 더 읽기
slave DB
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에서 커넥션 더 읽기