DBCP1.3数据库连接泄漏问题

线上环境中,使用DBCP1.3时遇到数据库连接泄漏问题,表现为数据库重启后会话迅速达到上限。问题源于数据库停机时,validateConnectionFactory方法抛异常导致dataSource未实例化,进而引发连接池无法正确初始化。解决方案是在异常处理中关闭连接池,避免资源泄露。参考DBCP-470 issue,发现1.4版本的源码已修复此问题,但官方未发布1.4.1版本。通过自行编译1.4分支的源码,问题得到解决。
摘要由CSDN通过智能技术生成

DBCP1.3数据库连接泄漏问题

线上使用的dbcp版本1.3,数据库为达梦7。

问题

在生产环境下发现,dbcp所连接的库一旦因为其它原因挂掉,再次重启数据库后会话将直接撑爆数据库,接着导致数据库再次挂掉。

如图中所示,会话撑满100个(上限默认的为100),连接全部是IDLE。

在参考issue DBCP-470后经本地测试发现问题重现。

问题主要原因是当所连接的数据库停机后,此时通过程序创建BasicDataSource对象来访问数据库时validateConnectionFactory方法抛异常导致datasource成员变量一直为空。

主要问题在于createDataSource()方法。

  1. 通过dataSource !=null来防止重复创建数据源

  2. 创建连接池

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值