pool2使用介绍 GenericKeyedObjectPool dbcp2使用介绍
- 2018-06-30 23:44:00
- admin
- 原创 376
一、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.java、pom.xml、pooldemo.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;