Java数据库连接池(BoneCP vs DBPool vs c3p0)

对于J2EE容器之外的Java应用程序,哪个连接池库最好?

  • 我听说c3p0已经过时了。
  • 雅加达的公共池库已不再开发

因此我留下了BoneCP和DBPool 。 据我所知,两者的活动都有限。 我可以看到的主要区别是性能,BoneCP似乎赢得了。 但是文档相当薄弱。

您在现实世界中使用了哪个数据库池库?为什么? 有什么好处和坏处?

在工作中,我们使用BoneCP(作为c3p0的替代品),据我所知,没有任何问题(我自己没有进行升级)。 从我所看到和阅读它看起来像一个精心设计的实体库,我个人会使用它而不是其他选择:它似乎是那些很好用的“正常工作”库之一。

关于DBPool没什么可说的,我对它不够熟悉; 虽然查看其网站文档肯定似乎是一个加号。

我们在Tomcat内外都使用C3P0。 但是,监视和日志记录并不是最好的,因此我们将开始使用SpringSource连接池。 我期待的最好的function之一就是准确显示在任何特定时间运行的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; } 

所以你必须考虑的事情:

  1. 支持和活动(如您所述)
  2. 速度
  3. 监控,日志记录和生产控制

BoneCP看起来很快(我以前没有听说过)但老实说C3P0对我们来说也是快速的。 回到4年或5年前我们测试过DBCP非常缓慢(他们似乎已经修复了),Oracle的池速度相当慢,而且C3P0非常快。 我们的测试非常类似于BoneCP网站上的测试。

我对BoneCP的可管理性一无所知。 #3已经certificate是我们生产环境中最重要的function。

当我们几年前做出选择时,它只是在c3p0和dbcp之间。 那时c3p0是在oracle重启后可以重建其连接的那个。 使用DBCP,我们不得不重新启动应用服务器以使其再次运行。

此外,我发现c3p0调试挂起连接function对跟踪连接泄漏非常有用,否则很难找到。

我从c3p0中遗漏的内容对于已执行语句的有用日志记录,包含有关它们花费多长时间的信息。

我目前正在大型企业内部网环境中试用BoneCP。 我有一致的线程问题与c3p0(如果你挖掘相当常见的),所以我做了我的研究,它似乎是最好的库存库。 配置是一个练习,但一旦你把它弄下来,它似乎很棒。

我使用c3p0和DataNucleus / JPA,很容易切换到BoneCP。 实际上,我所要做的就是更改Spring上下文文件中的DataSource配置。

据我所知,BoneCP基准测试非常好: http ://www.databaseskill.com/2282333/,http: //jolbox.com/benchmarks.html