对于 J2EE 容器之外的Java 应用程序,哪个连接池库是最好的?
- 我听说 c3p0 已经过时了。
- 雅加达的公共池库不再处于开发阶段
因此,我只剩下BoneCP和DBPool 了。据我所知,两者的活动都有限。我能看到的主要区别是性能,BoneCP 似乎胜出。但是文档非常薄弱。
您在现实世界中使用过哪个数据库池库,为什么?好与坏是什么?
在工作中,我们使用了 BoneCP(作为 c3p0 的替代品),据我所知没有任何问题(我自己没有进行升级)。从我所看到和阅读的内容来看,它似乎是一个设计良好的实体库,我个人会使用它而不是替代品:它似乎是那些很好用的“正常工作”库之一。
关于 DBPool 没什么可说的,我只是对它不够熟悉;尽管查看其站点文档当然似乎是一个加分项。
我们在 Tomcat 内外都使用 C3P0。但是,监控和日志记录并不是最好的,所以我们将开始使用 SpringSource 连接池。我期待的最佳功能之一是准确显示在任何特定时间运行的 SQL 语句。
我们必须添加到 C3P0 中的一件事是当池已满且所有连接都忙时,计时特定连接请求等待连接的时间:
public Connection getConnection() throws SQLException
{
long t = System.currentTimeMillis();
ComboPooledDataSource ds = (ComboPooledDataSource) getDelegate();
Connection conn = null;
if (ds.getNumBusyConnections() == ds.getMaxPoolSize())
{
logger.info("Pool (" + ds.getUser() + ") full, waiting for connection");
conn = ds.getConnection();
t = System.currentTimeMillis() - t;
logger.info("Connection busy wait time (" + ds.getUser() + "): " + t + "ms");
}
else
{
conn = ds.getConnection();
}
return conn;
}
所以你必须考虑的事情:
BoneCP 看起来很快(我以前没听说过),但老实说 C3P0 对我们来说也很快。当我们在 4 或 5 年前进行测试时,DBCP 非常慢(他们似乎已经解决了这个问题),Oracle 的池相当慢,而 C3P0 非常快。我们的测试看起来非常像 BoneCP 网站上的测试。
我对 BoneCP 的可管理性一无所知。#3 已被证明是我们生产环境中最重要的功能。
看看 HikariCP 替换 BoneCP https://brettwooldridge.github.io/HikariCP/这是我现在在我的项目中使用的一个。
几年前我们做出选择时,它只是在 c3p0 和 dbcp 之间。当时c3p0是可以在oracle重启后重建连接的。使用 DBCP,我们必须重新启动应用服务器才能使其再次运行。
我还发现 c3p0 调试悬挂连接功能对于跟踪连接泄漏非常有用,否则很难找到。
我从 c3p0 中缺少的是有用的日志记录,用于记录已执行的语句以及有关它们花费了多长时间的信息。
我目前正在大型企业内网环境中试用 BoneCP。我在 c3p0 上遇到了一致的线程问题(如果你仔细研究的话,这是很常见的问题),所以我做了我的研究,它似乎是最好的库存库。配置有点像练习,但是一旦你把它弄下来,它看起来很棒。
我使用 c3p0 和 DataNucleus/JPA,很容易切换到 BoneCP。实际上,我所要做的就是更改 Spring 上下文文件中的 DataSource 配置。
据我所知,BoneCP 基准测试非常好:http : //www.databaseskill.com/2282333/,http: //jolbox.com/benchmarks.html