druid 连接池 close connection error

[ERROR]2018-06-29 01:55:38,392 - com.alibaba.druid.util.JdbcUtils -close connection error
java.sql.SQLRecoverableException: IO Error: Connection reset
    at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:770)
    at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:4581)
    at com.alibaba.druid.filter.FilterChainImpl.connection_close(FilterChainImpl.java:175)
    at com.alibaba.druid.filter.stat.StatFilter.connection_close(StatFilter.java:261)
    at com.alibaba.druid.filter.FilterChainImpl.connection_close(FilterChainImpl.java:171)
    at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.close(ConnectionProxyImpl.java:115)
    at com.alibaba.druid.util.JdbcUtils.close(JdbcUtils.java:73)
    at com.alibaba.druid.pool.DruidDataSource.shrink(DruidDataSource.java:2662)
    at com.alibaba.druid.pool.DruidDataSource$DestroyTask.run(DruidDataSource.java:2427)
    at com.alibaba.druid.pool.DruidDataSource$DestroyConnectionThread.run(DruidDataSource.java:2414)
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:196)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at oracle.net.ns.Packet.receive(Packet.java:311)
    at oracle.net.ns.DataPacket.receive(DataPacket.java:105)
    at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:305)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:249)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:171)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:89)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79)
    at oracle.jdbc.driver.T4CMAREngineStream.unmarshalUB1(T4CMAREngineStream.java:426)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:390)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
    at oracle.jdbc.driver.T4C7Ocommoncall.doOLOGOFF(T4C7Ocommoncall.java:59)
    at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:757)

    ... 9 more


根据druid监控看出 打开连接池最大缓存为20个


 

可是真实打开和关闭的连接  远大于20个 则连接泄露   

 


close connection error   关闭连接错误  也就是说在关闭连接的时候这个连接就已经失效啦 

有可能还会有  close statement error  这个错误和上面同理


但是怎么解决还在摸索中  ,  在网上的大浪中基本上都是说 

<!-- 打开 removeAbandoned 功能  -- true
          30 分  --1800
   关闭 logAbandoned连接时输出错误日志 --true
       <property name = "removeAbandoned" value = "${jdbc.oracle.removeAbandoned}" />  
       <property name = "removeAbandonedTimeout" value ="${jdbc.oracle.removeAbandonedTimeout}" />  
       <property name = "logAbandoned" value = "${jdbc.oracle.logAbandoned}" /> 
-->


打开removeAbandoned 之后还是没有解决这个问题


poolPreparedStatements 为false 时  PreparedStatement打开 和关闭数正常    但是问题还是没有得到解决



最终解决办法为 :


获取连接时验证该连接是否可用

jdbc.oracle.testOnBorrow=true

__只能暂时用这个方法解决当前问题 

正常情况下他是不需要将testOnBorrow设置为true


邮箱地址 kaikoliang@163.com  如果错误请联系我  或者私信我


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package druidJDBCUtils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class DruidJDBCUtils { //定义成员变量 private static DataSource ds; //静态代码块加载配置文件 static { try { Properties prop = new Properties(); InputStream is = DruidJDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"); prop.load(is); ds = DruidDataSourceFactory.createDataSource(prop); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * 获取数据库连接对象 */ public static Connection getConnection() throws SQLException { return ds.getConnection(); } /** * 获取连接池方法 */ public static DataSource getDataSource(){ return ds; } /** * 关闭资源方法 * close()查询sql方法 */ public static void close(ResultSet resultSet, Statement statement, Connection connection) { if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 关闭资源方法 * close()增删改sql方法 */ public static void close(Statement statement, Connection connection) {
Druid连接池是一种高效、可扩展的Java数据库连接池,官方文档详细地介绍了Druid连接池的功能、配置和使用方法。 首先,文档介绍了Druid连接池的特点。Druid连接池具有高度可配置性,可以通过配置文件或者代码来设置连接池的参数,以适应不同的场景和需求。它还支持监控统计功能,可以实时监控连接池的使用情况,并提供详细信息和统计报表。此外,Druid连接池还支持防止恶意攻击、SQL注入等安全措施,以保护数据库的安全。 接下来,文档介绍了Druid连接池的配置方法。我们可以通过在配置文件中设置各种参数来配置连接池,例如设置初始化连接数、最大连接数、最小空闲连接数等。我们还可以配置连接的生命周期和验证策略,以及SQL统计功能等。Druid连接池还支持使用代码来动态配置连接池,这样可以更灵活地调整连接池的参数。 然后,文档介绍了使用Druid连接池的方法。我们可以通过通过简单的几行代码来获取连接,如"DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);"。获取连接后,可以使用该连接来执行SQL操作,并在完成后释放连接。Druid连接池还支持连接的自动扩展和收缩功能,可以根据连接的需求动态地增加或释放连接。 最后,文档介绍了Druid连接池的监控统计功能。我们可以通过配置一些参数来开启监控功能,并可以通过配置URL来访问监控的信息。监控信息包括连接数量、连接状态、执行的SQL语句等详细信息,以便我们能够全面了解连接池的使用情况,及时发现和解决问题。 总而言之,Druid连接池官方文档详细介绍了Druid连接池的功能、配置和使用方法,帮助用户更好地了解和使用Druid连接池,提高系统的数据库访问效率和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值