https://issues.apache.org/jira/browse/DBCP-334?page=com.atlassian.jira.plugin.ext.subversion%3Asubversion-commits-tabpanel#issue-tabs
在DBCP的bug report上有一个bug:
The BasicDataSource should have the "softMinEvictableIdleTimeMillis" (get and set) as the GenericObjectPool, to avoid destroying idle connections below the "minIdle" value. In this case, connections are dropped and immediately recreated with no reason. The "minEvictableIdleTimeMillis" should not be considered because there are ways to validate idle connections before they are used.
由于DBCP使用commons-pools,pool会有一个Evictor,会定时清理idle connection
startEvictor(_timeBetweenEvictionRunsMillis);
_timeBetweenEvictionRunsMillis表示Evictor执行的时间间隔,Evictor是一个TimerTask
这个bug表示,在从pool种丢弃一个connection链接时,由于要保持minIdle的数目,会立刻再创建一个connection,这样比较浪费资源
解决方法:
commons-pools中有两个参数 minEvictableIdleTimeMillis softMinEvictableIdleTimeMillis
minEvictableIdleTimeMillis 表示一个要被丢弃的话,至少要在pool中空闲了一定的时间,softMinEvictableIdleTimeMillis与minEvictableIdleTimeMillis 是一样的意思,只不过softMinEvictableIdleTimeMillis这个参数有另外一个条件:空闲数大于minIdle
来看一下Evictor的实现:
if ((getMinEvictableIdleTimeMillis() > 0) &&
(idleTimeMilis > getMinEvictableIdleTimeMillis())) {
removeObject = true;
} else if ((getSoftMinEvictableIdleTimeMillis() > 0) &&
(idleTimeMilis > getSoftMinEvictableIdleTimeMillis()) &&
((getNumIdle() + 1)> getMinIdle())) { // +1 accounts for object we are processing
removeObject = true;
}
对两个参数使用的唯一区别就在于 ((getNumIdle() + 1)> getMinIdle())) 时参数才有效
所以对于新的版本 建议使用softMinEvictableIdleTimeMillis这个参数
分享到:
相关推荐
开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发...
commons-dbcp2-2.7.0.jar用于Java连接数据库的使用,方便操作,简化代码,对于新入手学习JDBC的朋友可以尝试使用,idea 用DBCP连接数据库时必备jar包
commons-dbcp2-2.2.0-bin.zip 分享给有需要的朋友使用
赠送jar包:commons-dbcp2-2.2.0.jar; 赠送原API文档:commons-dbcp2-2.2.0-javadoc.jar; 赠送源代码:commons-dbcp2-2.2.0-sources.jar; 包含翻译后的API文档:commons-dbcp2-2.2.0-javadoc-API文档-中文...
commons-dbcp2-2.5.0-bin dbcp连接池相关的jar包及api文档
赠送jar包:commons-dbcp2-2.2.0.jar; 赠送原API文档:commons-dbcp2-2.2.0-javadoc.jar; 赠送源代码:commons-dbcp2-2.2.0-sources.jar; 赠送Maven依赖信息文件:commons-dbcp2-2.2.0.pom; 包含翻译后的API文档...
commons-dbcp2-2.5.0.jar最新的jar包,,,直接可以使用
(数据源所需要JAR包commons-dbcp2-2.1.1 (数据源所需要JAR包commons-dbcp2-2.1.1
dbcp数据库连接池
DBCP数据库连接池所需jar包commons-dbcp2-2.1.jar
commons-dbcp2-2.1.1.jar使用dbcp进行数据库连接池的jar包
赠送jar包:commons-dbcp-1.4.jar; 赠送原API文档:commons-dbcp-1.4-javadoc.jar; 赠送源代码:commons-dbcp-1.4-sources.jar; 赠送Maven依赖信息文件:commons-dbcp-1.4.pom; 包含翻译后的API文档:commons-...
commons-dbcp-1.3-javadoc.jar, commons-dbcp-1.3-RC1.jar, commons-dbcp-1.3-sources.jar, commons-dbcp-1.3.jar, commons-dbcp-1.4-javadoc.jar, commons-dbcp-1.4-sources.jar, commons-dbcp-1.4.jar, commons-...
Apache开源数据源所需要的jar包:commons-dbcp2-2.1.1.zip
DBCP(DataBase Connection Pool)是 apache common上的一个 java 连接池项目,也是 tomcat 使用的连接池组件,依赖 于Jakarta commons-pool 对象池机制,DBCP可以直接的在应用程序中使用。 使用DBCP会用到commons-...
druid、c3p0、dbcp-----jar包
commons-dbcp-1.3-sources.jarcommons-dbcp-1.3-sources.jarcommons-dbcp-1.3-sources.jarcommons-dbcp-1.3-sources.jar
commons-dbcp-1.4-src.tar.gz
commons-dbcp-1.4-sources.jar
commons-dbcp2-2.7.0-bin.zip,jar包。。