ASFDBCP를 사용하나, 커넥션이 자주 사용되지 않는 Java Application의 경우에 Database에 의해서 커넥션이 단절되는 현상이 나타날 수 있다.
MySQL의 경우에는 8시간동안 사용되지 않은 커넥션(DBCP가 물고있던..)은 MySQL이 강제로 끊어버리게 되는데, 이렇게 되면 Java Application이 기대대로 동작하지않게 된다. 보통은 아래와 같은 메시지가 나타나게 된다.

'com.mysql.jdbc.CommunicationsException: Communications link failure
Last packet sent to the server was 18 ms ago.'

이러한 경우 MySQL의 JDBC설정 시

url="jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true"

와 같이 'autoReconnect'옵션을 주게 되면, 커넥션에 문제가 있을 경우 다시 접속하게 된다.
그러나, 이 경우에도 끊어진 후 처음 한번의 시도는 실패가 나게 된다(이때 문제가 있다는것을 알게 되는 것이므로..).
 
이때는 추가적인 DBCP옵션인 'validationQuery'값의 설정으로 해결 가능하다.

validationQuery="select 1" => MySQL의 경우
validationQuery="select 1 from dual" => Oracle의 경우

validationQuery는 가장 간단한 결과값을 갖는 쿼리를 넣어야 한다. 왜냐하면 모든 사용자쿼리의 실행전에 이 쿼리가 실행되어 validation을 체크하기 때문이다.
valicationQuery가 추가적인 부하이기 때문에 실제로 커넥션 사용이 거의 없는 Application에서만 사용할 것을 권장한다.

validationQuery에 대한 추가적인 설정은 여기를 참조한다.

Posted by A.J.Kuhn

BLOG main image
A.J.Kuhn, Endless supply of passion!
Generalist A.J.Kuhn의 general한 이야기 by A.J.Kuhn

카테고리

분류 전체보기 (122)
Human (3)
Employee (6)
Developer (13)
Musician (2)
Snowboarder (12)
Baseball Player (0)
Traveler (0)
Reviewer (86)

글 보관함

달력

«   2012/02   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
Total : 112,273
Today : 6 Yesterday : 32