DBCP + JDBC(MySQL) 사용시 간혹 뜨는 Could not open JDBC Connection for transaction

DBCP(Database Connection Pool)을 사용하다 보면 가끔씩 만나게 되는 에러가 있다.

사용자 삽입 이미지
내 추측에는 DBCP의 특성상 많은 수의 커넥션을 미리 맺어 놓고, 어플리케이션이 풀에서 커넥션을 빌려다 사용하고 환원하는 식인데, 맺어놓은 커넥션을 MySQL의 커넥터가 끊어버리는듯 하다.

그래서 풀에 정상적으로 요청을 하였지만 그것이 MySQL 서버에까지 요청이 가지는 못하는것이라 판단된다.

이때 DB URL에 다음과 같은 옵션을 추가해 주면 된다.

interactiveClient=true&autoReconnect=true&autoReconnectForPools=true

사실 interactiveClient만 있어도 된다. CLIENT_INTERACTIVE 플래그로 타임아웃 관리하던것을 INTERACTIVE_TIMEOUT가 하게 된다.