前几天和同事聊天,同事做c++的,聊到c++没有很好的数据库连接池库,同事想自己写一个,但担心自己考虑不全面。我不以为然,数据库连接池而已,又不是没写过,没有open source之前,还不是自己写。同事却认为定我考虑的不全面。所以,才找来jakata common pools的源码看看。
jakata common pools中主要就以下三个接口
ObjectPool 连接池
ObjectPoolFactory 连接池工厂
PoolableObjectFactory 连接工厂
扩展开有:
基于key值管理的实现接口:
KeyedObjectPool
KeyedObjectPoolFactory
KeyedPoolableObjectFactory
继续扩展:
基于key值管理的一个简单实现的接口
BaseKeyedObjectPool
................
同时提供了BaseKeyedObjectPool的几种算法的实现,主要集中在对象在pools中的储存的数据结构不同。
功能上:
ObjectPool :
borrowObject 获取连接
returnObject 返回连接
invalidateObject(Object obj) 验证连接是否可用
addObject() 增加连接
getNumActive 获取活动连接数目
clear 清空
close 关闭
在实现中,提供了一些额外的功能:(以GenericKeyedObjectPool 为例)
maxIdle 最大空闲连接
maxActive 最大活跃连接
maxTotal 最大总数
minIdle 最小空闲
maxWait 最大阻塞时间
whenExhaustedAction 数据库连接没有后,如何处理
testOnBorrow 获取连接时,是否测试连接
testOnReturn 返回连接是否测试连接
testWhileIdle 空闲是否测试连接
timeBetweenEvictionRunsMillis 测试连接时间间隔
numTestsPerEvictionRun 空闲时同时测试连接数目
minEvictableIdleTimeMillis 最小可避免空闲时间。
所有可能产生并发的地方都使用了synchronized进行了串行化。效率一般。实现较为简单
5474



被折叠的 条评论
为什么被折叠?



