java – DBCP和Hibernate在Spring上,不会重新打开死连接,为什么?
我正在使用Hibernate和DBCP管理mySQL连接,都在 Spring项目中. 一切都正常.唯一的问题是,如果应用程序保持很长时间,它将抛出一个异常,因为连接死了(同样的事情,如果我重新启动mySQLd,当应用程序启动时).这不是很大的事情,因为用户将获得异常页面(或定制的),并且重新加载将解决问题.但是我想解决它.这是例外的一部分: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: **开始扣除** java.io.EOFException的 堆栈跟踪: java.io.EOFException:无法从服务器读取响应.预期读取4个字节,连接意外丢失. 我google了,我发现用mysql我应该将dbcp.BasicDataSource属性testOnBorrow设置为true,这是我在servlet-context.xml中完成的: <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://${mySQL.host}/${mySQL.db}" /> <property name="username" value="${mySQL.user}" /> <property name="password" value="${mySQL.pass}" /> <property name="testOnBorrow" value="true"></property> </bean> 但问题仍然存在.任何线索? 解!我用了: <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://${mySQL.host}/${mySQL.db}" /> <property name="username" value="${mySQL.user}" /> <property name="password" value="${mySQL.pass}" /> <property name="testOnBorrow" value="true"></property> <property name="validationQuery" value="SELECT 1"></property> </bean> 解决方法如果你设置testOnBorrow你还必须设置validationQuery –
我也设置了timeBetweenEvictionRunsMillis,所以死亡的连接将从池中逐出. (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |