Study/Java

jdbc SQLException : Already close.

LoonyHyun 2013. 11. 18. 11:18
반응형

error: java.sql.SQLException: Already closed. oracle
상황 : 이상없이 잘 사용하던 커넥션이 한번씩 끊긴다. 이후 재사용시에는 무리없는 활동을 보여준다.
이유 : 데이터베이스 입장에서 오랫동안 휴면되는 커넥션은 불필요하다고 판단하고, 끊어버린다. 때문에 커넥션풀 설정시 연결 확인용 쿼리를 지정해주어야 한다.


library에서 작업 시

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${db.driverName}"></property>
        <property name="url" value="${db.url}"></property>
        <property name="username" value="${db.username}"></property> 
        <property name="password" value="${db.password}"></property>
        <property name="initialSize" value="${db.initialSize}"></property>
        <property name="maxActive" value="${db.maxActive}"></property>        
      <property name="validationQuery" value="select 1 from dual" /> <!-- Oracle -->

 <property name="validationQuery" value="select 1" /> <!-- MySql -->

</bean>


tomcat에서 작업 시

<Resource
name="jdbc/MyDS" 
auth="Container"
type="javax.sql.DataSource"
username="nextree"
password="xxx"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/nextree"
validationQuery="select 1"
/>