개발일지/iBatis

DB 커넥션 종료 에러 / validationQuery

Kiwisae 2023. 2. 22. 18:20

증상 : 

오랫동안 접속이 없다가 이용할 시 에러 페이지가 한번 뜨고 새로고침하면 그 다음부터 정상 이용 가능

 

아래와 같은 메시지

 

java.sql.SQLException: No operations allowed after statement closed.

 

 

 

 

찾아보니

일정 시간이 지나면 DB 접속에 필요한 커넥션 풀이 close 되는 현상이고,

에러 페이지가 뜬 시점에서 다시 커넥션 풀이 연결되고 DB 접속이 된다.

그렇기 때문에 새로고침하면 정상 작동한다.

 

이런 현상을 방지하기 위해 config 에 다음과 같은 설정을 하나 넣어준다.

?autoReconnect=true

 

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://[ip]:[port]/[dbname]?autoReconnect=true
username=[username]
password=[password]

 

 

 

그러나 이 방법 보다는 validationQuery 를 사용한다.

select 1 쿼리로 유효 커넥션을 유지하기 위한 설정이다.

 


	<dataSource type="DBCP">
		<property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>			
		<property name="JDBC.ConnectionURL" value="jdbc:mysql://${DB접속에 필요한 경로}/>			
		<property name="JDBC.Username" value="${ID}"/>
		<property name="JDBC.Password" value="${PASSWORD}"/>
		<property name="maximumActiveConnections" value="10"/>
		<property name="maximumIdleConnections" value="5"/>
		<property name="maximumCheckoutTime" value="120000"/>
		<property name="timeToWait" value="10000"/>
		<property name="validationQuery" value="select 1"/>			
	</dataSource>