
백엔드
PoolCleaner를 활용한 Connection Pool 최적화
두줄요약
Tomcat PoolCleaner 설정으로 Idle·장기 실행 Connection을 관리하는 방식을 정리했습니다. ClassLoader 문제로 Timer가 중지되는 원인과 해결책을 공유했습니다.
문제 상황
- Tomcat DBCP의 Idle·장기 Active Connection 관리와 DBMS wait timeout 대응 필요
- PoolCleanTimer 중지 후 webapp reload 시
Timer already cancelled및IllegalStateException발생
구조와 흐름
removeAbandoned와removeAbandonedTimeout기반의 장기 실행 Connection 정리minIdle,testWhileIdle,validationQuery로 Idle Connection 유지 및 유효성 검사timeBetweenEvictionRunsMillis에 따른 싱글 스레드 PoolCleaner 스케줄 실행
원인 분석
- PoolCleanTimer 중지 후 재시작 불가로 Idle Connection 검사와 wait timeout 초기화 중단
- JDBC Driver를
WEB-INF/lib에 둘 때 webapp별 ClassLoader 분리와 기존 ConnectionPool 미종료 문제
해결 방법
- JDBC Driver를
tomcat/lib로 이동해 CommonClassLoader 기반으로 관리 - GlobalNamingResource로 ConnectionPool 공유 또는 Resource의
closeMethod로 종료 시 정리 - 실행 중 쿼리 중단 방지를 위한 충분한
removeAbandonedTimeout설정



