apache commons-pool的配置参数
write by yinmingjun,引用请注明。
最近在研究jedis,jedis的对象池是借助于apache的commons-pool实现的,发现关于commons-pool的文档真的很少,也许是大家都觉得commons-pool足够简单吧,不需要一个文档来描述。
看 了一下commons-pool的代码,写的真的很好,在java社区总是有这么一些人,在做无私的奉献,很佩服。在空闲之余,写一下commons- pool的配置说明,帮助那些只是希望简单理解或使用commons-pool的同学,知道如何配置commons-pool。
本文基于apache commons-pool-1.5.5。
对pool的配置一般是通过org.apache.commons.pool.impl.GenericObjectPool.Config来完成,这是个简单的数值对象,每个成员都预设了默认值,这里我们详细的介绍一下里面的各个成员的含义。
maxActive
控制池中对象的最大数量。
默认值是8,如果是负值表示没限制。
maxIdle
控制池中空闲的对象的最大数量。
默认值是8,如果是负值表示没限制。
minIdle
控制池中空闲的对象的最小数量。
默认值是0。
whenExhaustedAction
指定池中对象被消耗完以后的行为,有下面这些选择:
-
WHEN_EXHAUSTED_FAIL 0
-
WHEN_EXHAUSTED_GROW 2
-
WHEN_EXHAUSTED_BLOCK 1
如果是WHEN_EXHAUSTED_FAIL,当池中对象达到上限以后,继续borrowObject会抛出NoSuchElementException异常。
如果是WHEN_EXHAUSTED_GROW,当池中对象达到上限以后,会创建一个新对象,并返回它。
如果是WHEN_EXHAUSTED_BLOCK,当池中对象达到上限以后,会一直等待,直到有一个对象可用。这个行为还与maxWait有关,如果maxWait是正数,那么会等待maxWait的毫秒的时间,超时会抛出NoSuchElementException异常;如果maxWait为负值,会永久等待。
whenExhaustedAction 的默认值是WHEN_EXHAUSTED_BLOCK,maxWait的默认值是-1。
maxWait
whenExhaustedAction 如果是WHEN_EXHAUSTED_BLOCK,指定等待的毫秒数。如果maxWait是正数,那么会等待maxWait的毫秒的时间,超时会抛出NoSuchElementException异常;如果maxWait为负值,会永久等待。
maxWait的默认值是-1。
testOnBorrow
如果testOnBorrow被设置,pool会在borrowObject返回对象之前使用PoolableObjectFactory的validateObject来验证这个对象是否有效,要是对象没通过验证,这个对象会被丢弃,然后重新选择一个新的对象。
testOnBorrow的默认值是false。
testOnReturn
如果testOnReturn被设置,pool会在returnObject的时候通过PoolableObjectFactory的validateObject方法验证对象,如果对象没通过验证,对象会被丢弃,不会被放到池中。
testOnReturn的默认值是false。
testWhileIdle
指定idle对象是否应该使用PoolableObjectFactory的validateObject校验,如果校验失败,这个对象会从对象池中被清除。
这个设置仅在timeBetweenEvictionRunsMillis被设置成正值(>0)的时候才会生效。
testWhileIdle的默认值是false。
timeBetweenEvictionRunsMillis
指定驱逐线程的休眠时间。如果这个值不是正数(>0),不会有驱逐线程运行。
timeBetweenEvictionRunsMillis的默认值是-1。
numTestsPerEvictionRun
设置驱逐线程每次检测对象的数量。
这个设置仅在timeBetweenEvictionRunsMillis被设置成正值(>0)的时候才会生效。
numTestsPerEvictionRun的默认值是3。
minEvictableIdleTimeMillis
指定最小的空闲驱逐的时间间隔(空闲超过指定的时间的对象,会被清除掉)。
这个设置仅在timeBetweenEvictionRunsMillis被设置成正值(>0)的时候才会生效。
minEvictableIdleTimeMillis默认值是30分钟。
softMinEvictableIdleTimeMillis
与minEvictableIdleTimeMillis类似,也是指定最小的空闲驱逐的时间间隔(空闲超过指定的时间的对象,会被清除掉),不过会参考minIdle的值,只有idle对象的数量超过minIdle的值,对象才会被清除。
这个设置仅在timeBetweenEvictionRunsMillis被设置成正值(>0)的时候才会生效,并且这个配置能被minEvictableIdleTimeMillis配置取代(minEvictableIdleTimeMillis配置项的优先级更高)。
softMinEvictableIdleTimeMillis的默认值是-1。
lifo
pool可以被配置成LIFO队列(last-in-first-out)或FIFO队列(first-in-first-out),来指定空闲对象被使用的次序。
lifo的默认值是true。
相关推荐
标题中的"commo-pool, commons-pool commons-pool commons-pool"可能是由于输入错误,正确的应该是"Apache Commons Pool"。这个库在IT行业中尤其在服务器端编程和数据存储解决方案中扮演着重要角色,因为它可以帮助...
Apache Commons DBCP(Database Connection Pool)和Apache Commons Pool是两个在Java开发中广泛使用的开源库,主要用于数据库连接管理和对象池服务。这两个JAR文件,`commons-dbcp-1.4.jar` 和 `commons-pool-1.5.6...
这个库在DBCP中可能用于辅助处理数据结构,例如存储和操作连接池中的数据库连接,或者在处理配置参数时提供更灵活的数据结构支持。 这些库的协同工作方式如下: - 当应用启动时,DBCP会根据配置初始化一个数据库...
DBCP(Database Connection Pool)是Apache Jakarta项目中的一个子项目,它利用了commons-pool对象池机制来实现数据库连接的复用,从而减少创建和释放数据库连接时的开销。Tomcat,一个广泛使用的Java应用服务器,...
Apache Commons Pool 是一个Java对象池库,主要用于提供各种对象池实现,以便在多个请求之间复用对象,从而提高性能和减少资源消耗。...正确配置和使用Apache Commons Pool,可以有效地减少系统开销,优化应用性能。
Apache Commons Pool2是一个Java对象池库,用于管理资源对象,如数据库连接或网络套接字。这个库的主要目的是提高性能和资源效率,...了解并正确配置Apache Commons Pool2,有助于开发者构建更加健壮、高效的Java应用。
总结起来,Apache Commons Pool 2.8.1.jar是Java开发中一个强大且灵活的对象池实现,它提供了多种配置选项和策略,能够帮助开发者有效地管理资源,提高系统的运行效率。通过深入理解和使用,我们可以将这一工具的...
Apache Commons Pool2是一个通用的对象池服务,它提供了一个框架,用于创建可复用对象池。对象池设计的主要目标是减少频繁创建和销毁对象的开销,这对于那些创建和初始化成本较高的对象尤其有益。Pool2库提供了基础...
然后,使用这个工厂实例和配置参数来创建一个对象池实例。一旦有了对象池,就可以通过`borrowObject()`方法获取一个对象,使用完毕后通过`returnObject()`方法归还到池中。 总结起来,Apache Commons Pool2是一个...
4. **连接配置**:开发者可以通过配置参数,如最大连接数、最小连接数、超时设置等,来定制连接池的行为。 接下来,Apache Commons Pool是一个通用的对象池服务,它是DBCP内部依赖的基础组件。对象池是一种设计模式...
2. 连接池的配置:可以通过配置参数调整连接池的大小、超时时间、空闲检查频率等。 3. 连接生命周期管理:支持连接的初始化和销毁,以及在分配给客户端前后的验证。 4. 事务支持:允许在连接池中开启和关闭事务。 5....
5. **PoolConfig**: 配置参数,如最大连接数、最小连接数、超时时间等。 **DBCP的工作流程** 1. 应用程序请求数据库连接。 2. DBCP从连接池中获取一个空闲的连接,如果没有,则等待或创建新的连接。 3. 应用程序...
在给定的压缩包"jedis-2.7.2 + commons-pool2-2.3.rar"中,包含的是Jedis 2.7.2版本和Apache Commons Pool 2.3版本,这两个组件是协同工作以提高Redis连接管理效率的关键。 **Jedis 2.7.2**: Jedis 2.7.2是Jedis的...
在本话题中,我们将探讨两个重要的开源库:`commons-dbcp`和`commons-pool`,以及它们在配置DataSource时的作用,特别是在Tomcat服务器中的应用,以及与Struts框架配置的相关性。 `commons-dbcp`(Apache Commons ...
标题中的"jedis-2.9.0+commons-pool2-2.4.2redis依赖包"指的是一款基于Java实现的Redis客户端库Jedis的2.9.0版本,与Apache Commons Pool 2.4.2版本相结合的依赖包。这个组合主要用于优化Redis连接池管理,提高应用...
标题中的"jedis-3.2.0.jar + commons-pool2-2.6.2.jar"提到了两个关键的Java库:Jedis和Apache Commons Pool2。Jedis是Java编程语言中广泛使用的Redis客户端,而Apache Commons Pool2则是一个对象池实现,用于有效地...
- **池配置(Pool Configuration)**: 允许设置池的大小、超时策略等参数,以优化性能和资源使用。 - **对象生命周期管理(Object Life-cycle Management)**: 包括对象的初始化、验证、激活、钝化等过程,确保对象...
在Apache Commons Pool 1.6版本中,它提供了基本的对象池服务,包括对象生命周期管理、池配置以及各种策略来控制对象的分配和回收。 Apache Commons DBCP(Database Connection Pool)则是在Apache Commons Pool之...
`commons-pool2-2.4.2.jar`是Apache Commons Pool 2的实现,这是一个对象池设计模式的库。对象池是用于管理资源,如数据库连接或线程,以提高性能和效率的机制。在Java中,当频繁创建和销毁对象时,这可能导致大量的...
标题中的"commons-dbcp-1.4&&commons-pool-1.3.jar"指的是Apache Commons的两个重要组件:DBCP(Database Connection Pool)1.4版本和Pool 1.3版本。这两个组件在Java Web开发中扮演着关键角色,尤其在数据库连接...