commons.pool2使用 GenericObjectPool GenericKeyedObjectPool 应用场景 代码示例

2023-01-01 17:04:00
admin
原创 2783
摘要:commons.pool2使用 GenericObjectPool GenericKeyedObjectPool 应用场景 代码示例

一、commons.pool2使用

maven配置:

   <dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-pool2</artifactId>
  <version>2.5.0</version>
  </dependency>


继承说明:

GenericObjectPool继承BaseGenericObjectPool

GenericKeyedObjectPool继承BaseGenericObjectPool


对象池参数说明:

BaseGenericObjectPool默认参数:

lifo true 默认空闲对象后进先出

maxTotal -1 连接池对象不限制

blockWhenExhausted true 获取不到对象堵塞

maxWaitMillis -1 默认堵塞时间为永久

testOnCreate false 默认borrowObject创建对象不做validateObject

testOnBorrow false 默认borrowObject获取对象不做validateObject

testOnReturn false 默认returnObject归还对象不做validateObject

testWhileIdle false


GenericObjectPool默认参数:

maxIdle 8 最大空闲对象数,returnObject根据该值决定是否销毁对象。

minIdle 0 最小空闲对象数,preparePool函数使用该值初始化对象池。

GenericObjectPoolConfig:

jmxEnabled true 默认打开jmx监控

jmxNameBase null 非null时优先级高于ONAME_BASE

jmxNamePrefix pool 前缀默认值pool


GenericKeyedObjectPool默认参数:


工厂类说明:

PooledObjectFactory:提供对象生命周期中调用方法。

makeObject:创建对象,返回null或者抛出异常会导致异常抛出。

activateObject

1 激活对象,每次borrowObject一定会调用。

2 激活失败,则销毁对象,并在尝试再去获取一个对象。

3 如果获取的对象是刚刚创建的,激活失败,则销毁对象,并抛出异常NoSuchElementException。

passivateObject:冻结对象,每次returnObject一定会调用,抛出异常导致对象会被销毁,且异常被吞噬。

validateObject

borrowObject时,验证操作在activateObject之后:

1 验证失败,则销毁对象,并在尝试再去获取一个对象。

2 如果获取的对象是刚刚创建的,验证失败,则销毁对象,并抛出异常NoSuchElementException。

returnObject时,验证操作在passivateObject之前:抛出异常导致对象会被销毁,且异常被吞噬。

BasePooledObjectFactory:PooledObjectFactory适配器,只用实现create和wrap方法。

create:返回null或者抛出异常会导致异常抛出。


对象池说明:

BaseGenericObjectPool:对象池基类

todo


GenericObjectPool:通用对象池

preparePool:初始化对象池,保证对象池有minIdle对象,可能抛异常。

addObject:初始化对象池,给对象池添加一个对象,如果对象池已满,则什么操作都不做。

borrowObject:从对象池取得一个对象。

1 blockWhenExhausted=false,maxTotal对象使用完,立即抛出NoSuchElementException:Pool exhausted

2 blockWhenExhausted=true,maxTotal对象使用完,会等待maxWaitMillis毫秒,超时抛出NoSuchElementException异常。

returnObject:归还一个对象到对象池。

invalidateObject:从对象池删除一个对象,如果有线程在等待对象,则会再创建一个对象。

getNumIdle:返回空闲对象个数。

getNumActive:返回被使用的对象个数。

clear:清除所有的空闲对象,释放闲置资源。

close:关闭对象池,释放对象池所有资源,close之后borrowObject会产生异常,returnObject不会产生异常。


二、开源应用场景

jedis redis客户端api

dbcp 数据库连接池

关键字

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