加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – DBCP和Hibernate在Spring上,不会重新打开死连接,为什么

发布时间:2020-12-14 16:27:11 所属栏目:Java 来源:网络整理
导读:我正在使用Hibernate和DBCP管理mySQL连接,都在 Spring项目中. 一切都正常.唯一的问题是,如果应用程序保持很长时间,它将抛出一个异常,因为连接死了(同样的事情,如果我重新启动mySQLd,当应用程序启动时).这不是很大的事情,因为用户将获得异常页面(或定制的),并
我正在使用Hibernate和DBCP管理mySQL连接,都在 Spring项目中.

一切都正常.唯一的问题是,如果应用程序保持很长时间,它将抛出一个异常,因为连接死了(同样的事情,如果我重新启动mySQLd,当应用程序启动时).这不是很大的事情,因为用户将获得异常页面(或定制的),并且重新加载将解决问题.但是我想解决它.这是例外的一部分:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

**开始扣除**

java.io.EOFException的
MESSAGE:无法从服务器读取响应.预期读取4个字节,读取0字节,连接意外丢失.

堆栈跟踪:

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 –

validationQuery – The SQL query that will be used to
validate connections from this pool
before returning them to the caller.
If specified,this query MUST be an
SQL SELECT statement that returns at
least one row.

我也设置了timeBetweenEvictionRunsMillis,所以死亡的连接将从池中逐出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读