본문 바로가기

날리지/언어

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

Spring : MySQL 연결 시도 시 

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException 나올 때


아.. 에러를 제대로 캡쳐했어야했어...ㅜㅜ 하지만 아래 콘솔에 있는 내용으로 구글링해서 해결을 본 것이니 이정도 내용이면 충분할 듯 하다.


에러발생 당시 콘솔출력내용

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure


The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.


WARN : com.mchange.v2.resourcepool.BasicResourcePool - Having failed to acquire a resource, com.mchange.v2.resourcepool.BasicResourcePool@1baf602 is interrupting all Threads waiting on a resource to check out. Will try again in response to new client requests.

....



원인은 

스프링 프레임웍과 MySQL 사용 시 특정 시점이 지나면 자동으로 커넥션을 잃어버리는 문제가 있단다. 

스프링에서 오랜시간 동안 아무런 데이터요청이 없으면 커넥션과 풀링을 해지하는 기능을 가지고 있기 때문에 이런 문제가 나오는 것이란다.

이 문제를 해결하기 위해선 autoReconnection 속성을 true로 바꿔주면 간단히 해결된다.



dataSource 내용 변경 전

<!-- JDBC dataSource 설정. 톰캣 server.xml 설정하듯이. -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

<property name="driverClass" value="com.mysql.jdbc.Driver"/>

<property name="jdbcUrl" 

  value="jdbc:mysql://localhost:3306/we2?characterEncoding=utf8&amp;useSSL=false" />

<property name="user" value="we2admin" />

<property name="password" value="1234" />

</bean>


dataSource 내용 변경 후

<!-- JDBC dataSource 설정. 톰캣 server.xml 설정하듯이. -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

<property name="driverClass" value="com.mysql.jdbc.Driver"/>

<property name="jdbcUrl" 

value="jdbc:mysql://localhost:3306/we2?characterEncoding=utf8&amp;useSSL=false&amp;autoReconnection=true" />

<property name="user" value="we2admin" />

<property name="password" value="1234" />

</bean>



ref: https://m.blog.naver.com/PostView.nhn?blogId=imf4&logNo=220798149078&proxyReferer=https:%2F%2Fwww.google.com%2F