pool2使用介绍 GenericKeyedObjectPool dbcp2使用介绍

2018-06-30 23:44:00
admin
原创 376
摘要:pool2使用介绍 GenericKeyedObjectPool dbcp2使用介绍

一、GenericKeyedObjectPool

1、pool2在线帮助:https://commons.apache.org/proper/commons-pool

2、KeyedObjectPool对象池接口,GenericKeyedObjectPool是对象池实现;

3、KeyedPooledObjectFactory缓存对象工厂接口,BaseKeyedPooledObjectFactory是基础实现;

4、GenericKeyedObjectPool相比多个GenericObjectPool,主要是增加了总量控制;


GenericKeyedObjectPoolConfig常用配置:

1、maxTotal对象池最大对象数量,-1表示不限制数量,默认-1;

2、maxTotalPerKey每个key的最大对象数量,-1表示不限制数量,默认8个;

3、maxIdlePerKey每个key的最大空闲对象数量-1表示不限制数量默认8个;

4、minIdlePerKey每个key的最小空闲对象数量,最小0个,默认0个;


GenericKeyedObjectPool函数介绍:

1、V borrowObject(K key),从对象池获取对象;

2、void returnObject(K key, T obj),归还对象到对象池;

3、void invalidateObject(K key, V obj),从对象池清除对象;

4、void addObject(K key),增加一个新对象到对象池;

5、void preparePool(K key),初始化空闲对象,使数量达到minIdle

6、void clear(K key),清除指定key的空闲对象,释放闲置资源


GenericKeyedObjectPool统计函数:

1、int getNumActive(K key),指定key的正在使用的对象数量;

2、int getNumIdle(K key),指定key的空闲对象数量;

3、int getNumActive(),正在使用的对象数量;

4、int getNumIdle(),空闲对象数量;


创建对象:

1、每个key关联一个ObjectDeque,包含一个全量对象列表和一个空闲对象列表;

2、满足条件numTotal<maxTotal && objectDeque.createCount<maxTotalPerKey

3、numTotal>=maxTotal,其他队列包含空闲对象,清除15%空闲对象,再次进行判断;

4、numTotal>=maxTotal,其他队列不包含空闲对象,直接返回空对象;


二、dbcp2使用介绍

1、配置文档:https://commons.apache.org/proper/commons-dbcp/configuration.html

2、BasicDataSource只需要设置url、username、password,其他属性按需设置;

3、按需设置连接属性connectionProperties,格式是[propertyName=property;]*

4、数据库驱动获取优先级:driver > driverClassName > url;

5、默认在获取对象时进行验证对象,默认不淘汰对象;

6、代码示例:DBCP2App.javapom.xmlpooldemo.zip


BasicDataSource常用函数:

1、void start(),初始化连接池,显示调用可以提升首次获取连接效率;

2、void close(),关闭连接池,可以重复调用,关闭后可重新开启连接池;

3、Connection getConnection(),获取一个数据库连接;


BasicDataSource常用配置:

1、initialSize对象池初始对象数量,默认0个;

2、maxTotal对象池最大对象数量,-1表示不限制数量,默认8个;

3、maxIdle对象池最大空闲对象数量,-1表示不限制数量,默认8个;

4、minIdle对象池最小空闲对象数量,最小0个,默认0个;

5、maxWaitDuration获取对象最长等待时间,-1表示一直等待,默认-1毫秒;

6、maxConnLifetimeMillis对象最长存活时间,<=0表示不限制时间,默认-1毫秒;

7、logExpiredConnections对象过期是否打印日志,默认true;

8、defaultAutoCommit自动提交事务,默认为空不调用setAutoCommit;

9、enableAutoCommitOnReturn归还时设置自动提交事务,默认为true;

10、defaultQueryTimeout数据库查询超时时间,默认为空使用驱动设置;


BasicDataSource不常用配置:

1、jmxName设置名称才会开启JMX监控,默认为空;

2、testOnCreate创建对象时是否调用validateObject,默认false;

3、testOnBorrow获取对象时是否调用validateObject,默认true;

4、testOnReturn归还对象时是否调用validateObject,默认false;

5、connectionInitSqls连接初始化语句,创建连接时执行一次;

6、validationQuery连接检活语句,默认且推荐不设置,使用con.isValid;

7、validationQueryTimeout检活超时时间,<1秒表示无超时,默认无超时;

8、poolPreparedStatements是否缓存PreparedStatement,默认false;
9、maxOpenPreparedStatements最大缓存语句数量,默认不限制;


BasicDataSource淘汰对象设置:

1、durationBetweenEvictionRuns淘汰对象检测周期,-1表示不淘汰对象,默认-1毫秒;
2、numTestsPerEvictionRun每次检测对象数量上限,负数表示空闲对象比例,默认3个;
3、minEvictableIdleDuration空闲对象淘汰时间,-1表示永不过期,默认30分钟;
4、softMinEvictableIdleDuration软空闲对象淘汰时间,-1表示永不过期,默认-1毫秒;

5、testWhileIdle空闲对象测试空闲对象不满足淘汰策略才会测试,默认false;


三、dbcp2组件介绍

BasicDataSource组件介绍:

1、包含一个PoolingDataSource,实际使用PoolingDataSource

2、BasicDataSource.testOnBorrow=true,GenericObjectPool.testOnBorrow=false

3、BasicDataSource.cacheState=true,PoolableConnectionFactory.cacheState=false

4、BasicDataSource.fastFailValidation=false,PoolableConnectionFactory.fastFailValidation=true


Connection实现详解:

1、默认不缓存PreparedStatement:PoolableConnection 包含 Connection;

2、缓存PreparedStatement:PoolableConnection  包含 PoolingConnection 包含 Connection;

3、PoolableConnection继承DelegatingConnection,DelegatingConnection实现Connection接口

4、PoolingConnection继承DelegatingConnection,DelegatingConnection实现Connection接口

5、PoolableConnection.close归还连接到连接池PoolingConnection实现缓存Statement

发表评论
评论通过审核之后才会显示。