Software caused connection abort: recv failed异常

来源:互联网 发布:sqlyog怎么导入sql文件 编辑:程序博客网 时间:2024/04/28 15:35

前段时间在工作中遇到这样一个问题!

我写了一个java项目,但有不想使用jdbc读取文件配置数据库连接的方式,打算将数据库连接交给spring管理,这样会比较方便一点。

刚开始时这样的

<bean id="自定义ID" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url" value="jdbc:oracle:thin:@服务器IP:1521:数据库服务名">
</property>
<property name="username" value="用户名"></property>
<property name="password" value="密码"></property>
<!-- 池启动时创建的连接数量 -->
<property name="initialSize" value="5"></property>
<!-- 同一时间可以从池分配的最多连接数量。设置为0时表示无限制 -->
<property name="maxActive" value="30"></property>
<!-- 池里不会被释放的最多空闲连接数量。设置为0时表示无限制 -->
<property name="maxIdle" value="15"></property>
<!-- 在不新建连接的条件下,池中保持空闲的最少连接数 -->
<property name="minIdle" value="1"></property>
<!-- 设置在自动回收超时连接的时候打印连接的超时错误  -->
<property name="logAbandoned" value="true"></property>
<!-- 设置自动回收超时连接 -->
<property name="removeAbandoned" value="true"></property>
<!-- 自动回收超时时间(以秒数为单位) -->
<property name="removeAbandonedTimeout" value="30"></property>
<!-- 超时等待时间以毫秒为单位  -->
<property name="maxWait" value="3000"></property>
</bean>

正常运行没有问题,由于程序中存在定时任务,所以在规定时间内会自动执行指定的方法

在定时执行的过程中抛出了这个异常

Software caused connection abort: recv failed



上网找了好多资料,试了试还是不能解决这个问题


翻了翻以前做的项目,发现使用的数据库连接池管理类不同。

有是那种数据库连接池管理类:

1、org.apache.commons.dbcp.BasicDataSource =====依赖APACHE下的commons.dbcp-1.4.jar

2、org.logicalcobwebs.proxool.ProxoolDataSource ======proxool.jar下的

使用maven配置

<dependency>
<groupId>com.cloudhopper.proxool</groupId>
<artifactId>proxool</artifactId>
<version>0.9.1</version>
</dependency>

3、com.mchange.v2.c3p0.ComboPooledDataSource -=======依赖的jar使用maven配置

<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2.1</version>
</dependency>



那么这三种有什么区别呢?


网上的评价是:

 

C3P0

比较耗费资源,效率方面可能要低一点。

 

DBCP

在实践中存在

BUG

,在某些种情会产生很多空连接不能释放,

Hibernate3.0

已经放弃

了对其的支持。

 

Proxool

的负面评价较少,现在比较推荐它,而且它还提供即时监控连接池状态的功能,便

于发现连接泄漏的情况。

网上的评价是: 
C3P0比较耗费资源,效率方面可能要低一点。 
DBCP在实践中存在BUG,在某些种情会产生很多空连接不能释放,Hibernate3.0已经放弃了对其的支持。 
Proxool的负面评价较少,现在比较推荐它,而且它还提供即时监控连接池状态的功能,便于发现连接泄漏的情况。

但是我使用了Proxool 之后测试还是会抛出以上的异常信息,

<bean id="自定义ID" class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="driverUrl" value="jdbc:oracle:thin:@服务器IP:1521:服务名"></property>
<property name="user" value="用户名"></property>
<property name="password" value="密码"></property>
<property name="prototypeCount" value="2"></property>
<property name="minimumConnectionCount" value="10"></property>
<property name="maximumConnectionCount" value="30"></property>
</bean>


最后试了试C3P0的

<bean id="自定义ID" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@服务IP:1521:服务名"></property>
<property name="user" value="用户名"></property>
<property name="password" value="密码"></property>
<property name="minPoolSize">
            <value>5</value>
        </property>
        <property name="maxPoolSize">
            <value>30</value>
        </property>
        <property name="initialPoolSize">
            <value>10</value>
        </property>
        <property name="maxIdleTime">
            <value>60</value>
        </property>
        <property name="acquireIncrement">
            <value>5</value>
        </property>
        <property name="maxStatements">
            <value>0</value>
        </property>
        <property name="idleConnectionTestPeriod">
            <value>60</value>
        </property>
        <property name="acquireRetryAttempts">
            <value>30</value>
        </property>
        <property name="breakAfterAcquireFailure">
            <value>false</value>
        </property>
        <property name="testConnectionOnCheckout">
            <value>false</value>
        </property>

</bean>



问题就解决了,具体的配置解释就不多说了

0 0
原创粉丝点击