hibernate c3p0连接池断线自动重连 - 全栈笔记

hibernate c3p0连接池断线自动重连

任亦伟 JAVA, 默认分类 2015-07-29 305 次浏览 没有评论

Messages:
1. Software caused connection abort: recv failed
2. Communications link failure The last packet successfully received from the server was 2,174,468 milliseconds ago. The last packet sent successfully to the server was 7 milliseconds ago.
3. could not execute query
File: org/hibernate/exception/SQLStateConverter.java
Line number: 99

原因分析:

造成该异常的原因是因为连接池中的连接已经超时失效,而程序在使用该连接的时候没有去检测该连接是否有效。

解决方案:

1、修改mysql的超时等待时间:

2、修改c3p0的配置,使程序在使用连接池之前对连接进行检测,如果无效,则重新获取连接。

例子:

01
02
  <!-- 数据源 -->
03
  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
04
    <property name="driverClass" value="${jdbc.driverclass}" />
05
    <property name="jdbcUrl" value="${jdbc.url}" />
06
    <property name="user" value="${jdbc.username}" />
07
    <property name="password" value="${jdbc.password}" />
08
 
09
    <property name="maxPoolSize" value="${c3p0.pool.size.max}" />
10
    <property name="minPoolSize" value="${c3p0.pool.size.min}" />
11
    <property name="initialPoolSize" value="${c3p0.pool.size.ini}" />
12
    <property name="acquireIncrement" value="${c3p0.pool.size.increment}" />
13
 
14
 
15
    <!--定义在从数据库获取新连接失败后重复尝试的次数。默认值: 30 ;小于等于0表示无限次 -->
16
    <property name="acquireRetryAttempts" value="0" />
17
    <!--重新尝试的时间间隔,默认为:1000毫秒 -->
18
    <property name="acquireRetryDelay" value="1000" />
19
    <!--定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。测试的表必须在初始数据源的时候就存在。Default: 
20
      null -->
21
    <property name="preferredTestQuery" value="select 1" />
22
    <!--每1800秒检查所有连接池中的空闲连接。Default: 0 -->
23
    <property name="idleConnectionTestPeriod" value="300" />
24
    <!-- 获取连接时测试有效性,每次都验证连接是否可用 -->
25
    <property name="testConnectionOnCheckout" value="false" />
26
 
27
  </bean>
28

发表评论

回顶部