前几天和同事聊天,同事做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进行了串行化。效率一般。实现较为简单