最近再使用fastdfs上传时,需要用到连接池,用的是common pool 1.6,对于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。
注:common pool 已经从1.* 变成common pool 2了,jedis pool 就是对common pool2 进行了封装,但是没有初始化值大小,而dbcp,或者c3p0等数据库连接池,也是对common pool 进行了封装,那种封装方式不错,可以参考。自己写的连接池或多或少都有问题。