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这个参数
分享到:
相关推荐
3. `commons-dbcp2-2.7.0-sources.jar`(如果存在):源代码文件,方便开发者查看和学习DBCP2的内部实现。 4. `commons-dbcp2-2.7.0-javadoc.jar`(如果存在):Java文档,提供了API的详细说明,有助于开发者理解和...
3. **commons-dbcp-1.3.jar**: 这是DBCP 1.3版本的库,相较于1.4版本,可能缺少一些改进和修复的bug。尽管如此,对于某些只支持旧版本的项目,它仍然有价值。了解不同版本之间的差异可以帮助开发者选择最适合他们...
在压缩包文件名称“commons-dbcp2-2.1.1”中,“2-2.1.1”表示这是DBCP的版本号,2.1.1是DBCP的一个稳定版本,可能包含了bug修复、性能优化和其他改进。 Apache Commons DBCP的主要功能和知识点包括: 1. **连接池...
DBCP(Database Connection Pool)是Apache软件基金会的Commons项目中...这个压缩包提供了一个学习和实践DBCP的起点,开发者可以通过研究不同版本的特性,结合实际应用场景,灵活运用DBCP来提升系统的数据库管理能力。
- **Connection Pooling Support**: DBUtils可以与各种流行的Java数据库连接池无缝集成,如C3P0、DBCP和HikariCP,便于实现高效的数据库连接管理。 4. **版本差异** - `commons-dbutils-1.3.jar`: 较旧的版本,...
8. **测试与调试**:源代码中可能会包含单元测试和集成测试,帮助学习者掌握测试策略,找出并修复程序中的bug。 9. **项目组织结构**:源代码的目录结构反映了项目的模块化设计,通过研究这个结构,学习者可以了解...
在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是企业级应用开发的重要标准,涵盖了一系列技术和框架。作为一名J2EE程序员,你需要掌握...不断学习和实践,跟上J2EE技术的发展趋势,是保持竞争力的关键。
c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供了比DBCP更丰富的配置参数,以实现更精细的数据库连接管理。在Hibernate中集成c3p0,可以实现更高效、更稳定的数据连接管理,减少数据库资源的消耗,...
5. **整合DataSource对象**:配置数据源,连接数据库,一般使用Apache的DBCP或C3P0等连接池。 6. **整合Mybatis框架**:配置MyBatis的SqlSessionFactoryBean,映射XML配置文件,定义Mapper接口。 7. **整合Spring ...
1. **数据库连接池**:如C3P0、HikariCP和DBCP,它们管理数据库连接,提高应用程序的性能和资源利用率。数据库连接池负责创建、配置、维护数据库连接,避免频繁创建和关闭连接的开销。 2. **消息队列(MQ)**:如...
描述中提到的"旧的Tom猫出问题",这可能是由于各种原因,如软件bug、配置错误、兼容性问题或资源不足等。升级到最新版Apache Tomcat7是为了利用其改进的稳定性和新特性,解决可能存在的问题。"一气之下"下载最新版也...
15. **问题解决与调试技巧**:面试官可能会考察候选人遇到问题时的思考方式和解决问题的能力,包括阅读和理解他人代码、分析日志、定位bug等。 通过学习和掌握以上知识点,不仅可以为华为、IBM等公司的Java面试做好...
值得注意的是,由于是课程设计,系统可能存在功能不完善或bug,其主要目的是让学生掌握基本的Web开发技能和实践经验。 【知识点详解】: 1. **Java技术**:Java是一种广泛应用于Web开发的编程语言,尤其在企业级...
- **数据库连接池**:如 HikariCP、C3P0 或 Apache DBCP,它们提高了应用的性能和资源管理。 - **事务管理**:理解如何在 Java 中使用 JDBC 实现 ACID(原子性、一致性、隔离性和持久性)事务。 - **SQL查询优化**:...