出现情况:
在服务器开启一段时间后,再调用数据库连接时就会报这个错,或者网络不稳定是进行数据库查询时也会报这个异常。
异常截图:
异常原因:
在连接数据库的线程池中,因为连接了太久没有使用时,系统会回收这个数据库连接,所以过一段时间后执行数据库连接操作时,项目可能会使用这失效的数据库连接去连接数据库,导致这个异常。
解决方法:
在数据库连接配置文件中加入<property name="validationQuery" value="select * from dual" ></property>
这样在进行数据库连接的时候,会先进行测试,测试连接是否可用,如果连接为无效连接则在连接池中重新获取新的数据库连接
原配置文件:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings useStatementNamespaces="true" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@127.0.0.1:1521:ORCL" />
<property name="JDBC.Username" value="xxx" />
<property name="JDBC.Password" value="xxx" />
<property name="JDBC.maxPoolSize" value="20"></property>
<property name="JDBC.minPoolSize" value="1"></property>
</dataSource>
</transactionManager>
<sqlMap resource="conf/bankCustInfo.xml" />
</sqlMapConfig>
修改后:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings useStatementNamespaces="true" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@127.0.0.1:1521:ORCL" />
<property name="JDBC.Username" value="xxx" />
<property name="JDBC.Password" value="xxx" />
<property name="JDBC.maxPoolSize" value="20"></property>
<property name="JDBC.minPoolSize" value="1"></property>
<property name="validationQuery" value="select * from dual" ></property>
</dataSource>
</transactionManager>
<sqlMap resource="conf/bankCustInfo.xml" />
</sqlMapConfig>