개발일지/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>