Spring上的DBCP和Hibernate,没有重新打开死连接,为什么?
|
我正在Spring项目中使用Hibernate和DBCP来管理mySQL连接。
一切正常。唯一的问题是,如果应用程序长时间静止不动,则会因连接已死而引发异常(如果在应用程序启动时重新启动mySQLd,也会发生同样的事情)。没什么大不了的,因为用户将获得异常页面(或自定义页面),然后重新加载即可解决问题。但是我想解决它。这是例外情况的一部分:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
**开始嵌套例外**
java.io.EOFException
消息:无法读取服务器的响应。预期读取4个字节,在意外丢失连接之前读取0个字节。
堆栈跟踪:
java.io.EOFException:无法读取来自服务器的响应。预期读取4个字节,在意外丢失连接之前读取0个字节。
我到处搜索,发现使用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>
没有找到相关结果
已邀请:
1 个回复
澳绍能
,还必须设定
- validationQuery-将用于执行以下操作的SQL查询 验证来自此池的连接 然后再将其返回给呼叫者。 如果指定,此查询必须是 在以下位置返回的SQL SELECT语句 至少一排。 我还设置了
,以便将死连接从池中清除。