因为在开源中国的资讯中看到Apache Commons Pool的版本升级了,Apache Commons Pool 2.6.2 发布
然后发版文档中描述了修复的几个bug,不求甚解!
我们就先用用这个最新的包来看看:
看javadoc文档,还是比较简洁的
先来写一个demo:
写一个测试方法:
运行输出:
当然如果我把循环的次数加大,比如从8改成10,那么就会阻塞等待其他的先归还,当然还可以设置超时等的限制。
这里使用自带的GenericObjectPoolConfig,配置主要如下:
然后再介绍一下这些参数:
- maxActive: 链接池中最大连接数,默认为8.
- maxIdle: 链接池中最大空闲的连接数,默认为8.
- minIdle: 连接池中最少空闲的连接数,默认为0.
- maxWait: 当连接池资源耗尽时,调用者最大阻塞的时间,超时将跑出异常。单位,毫秒数;默认为-1.表示永不超时.
- minEvictableIdleTimeMillis: 连接空闲的最小时间,达到此值后空闲连接将可能会被移除。负值(-1)表示不移除。
- softMinEvictableIdleTimeMillis: 连接空闲的最小时间,达到此值后空闲链接将会被移除,且保留“minIdle”个空闲连接数。默认为-1.
- numTestsPerEvictionRun: 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
- testOnBorrow: 向调用者输出“链接”资源时,是否检测是有有效,如果无效则从连接池中移除,并尝试获取继续获取。默认为false。建议保持默认值.
- testOnReturn: 向连接池“归还”链接时,是否检测“链接”对象的有效性。默认为false。建议保持默认值.
- testWhileIdle: 向调用者输出“链接”对象时,是否检测它的空闲超时;默认为false。如果“链接”空闲超时,将会被移除。建议保持默认值.
- timeBetweenEvictionRunsMillis: “空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
- whenExhaustedAction: 当“连接池”中active数量达到阀值时,即“链接”资源耗尽时,连接池需要采取的手段, 默认为1:
-> 0 : 抛出异常,
-> 1 : 阻塞,直到有可用链接资源
-> 2 : 强制创建新的链接资源
我们可以看到PooledObjectFactory接口定义了要做哪一些方法。
按照阿里开发手册,如果在实现中使用了设计模式,那么在命名规则中的名称也要体现。
当然在上面的代码中,我们使用的谁抽象类BasePooledObjectFactory
- Object makeObject() : 创建一个新对象;当对象池中的对象个数不足时,将会使用此方法来输出一个新的"对象",并交付给对象池管理.
- void destroyObject(Object obj) : 销毁池不再需要的实例。
- boolean validateObject(Object obj) : 检测对象是否有效。
- void activateObject(Object obj) : 激活对象,让调用者使用时感觉像一个新创建的对象一样。
- void void passivateObject(Object obj) : 当调用者"归还对象"时,取消初始化要返回到空闲对象池的实例。
后续多学习点再继续!
参考:https://shift-alt-ctrl.iteye.com/blog/1917782