DBCP

       DBCP是apache下面的一个开源的数据库连接池,谈谈几个经验

1 Connection出问题后的释放

       Connection建立成功后,如果在某次操作的时候,连接本身出现异常,可能需要废弃掉这个连接,创建新连接。当然对于mysql,支持autoReconnect的则不存在问题(Connection本身不需要废弃),但是如果不支持autoReconnect的driver,就存在这个问题。DBCP中使用的是PoolableConnection,关闭的时候,判断PoolableConnection是否close,因为这个PoolableConnection上还有代理,所以不会重复关闭,那么就判断底层的Connection的isClosed是否为true,如果是true,那么就会丢弃这个连接。JDK中Connection接口的isClosed只在Connection.close被调用后为true,在Driver的实现上,产生和数据库连接的异常后,Driver必须要自己调用close方法,才能保证这个地方让DBCP去丢弃连接。另外就是在close的时候,还调用了ConnectionFactory的passiveObject方法,这个地方出异常也会导致连接被丢弃掉。

2 关于Idle

      默认DBCP的minIdle和maxIdle都是-1,设置以后的话,对于maxIdle,如果maxIdle小于maxActive,那么在调用returnObject的时候,如果当前的idle已经等于maxIdle了,会释放掉这个连接。

3 evict

     如果设置了evict的time,那么会启动一个evictor的线程,这个是对idle的object进行检查的。基本上的逻辑是验证idle的object,删除idle超时的object,然后要保证idle的数量到达minIdle的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值