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>
    
已邀请:
如果您设定
testOnBorrow
,还必须设定
validationQuery
-   validationQuery-将用于执行以下操作的SQL查询   验证来自此池的连接   然后再将其返回给呼叫者。   如果指定,此查询必须是   在以下位置返回的SQL SELECT语句   至少一排。 我还设置了
timeBetweenEvictionRunsMillis
,以便将死连接从池中清除。     

要回复问题请先登录注册