Java/JDBC可用的最佳连接池库是什么?

我正在考虑两个主要的候选(免费/开源):

Apache DBCP - http://commons.apache.org/dbcp/ C3P0 - http://sourceforge.net/projects/c3p0

我在博客和其他论坛上读了很多关于他们的文章,但无法做出决定。

有什么相关的替代方案吗?


当前回答

当连接超时时,我遇到了DBCP问题,所以我尝试了c3p0。我本打算将其发布到生产环境中,但随后开始了性能测试。我发现c3p0表现很糟糕。我根本无法将其配置得很好。我发现它比DBCP慢两倍。

然后我尝试了Tomcat连接池。

这是c3p0的两倍快,并修复了我在DBCP中遇到的其他问题。我花了很多时间调查和测试这3个池子。如果要部署到Tomcat,我的建议是使用新的Tomcat JDBC池。

其他回答

我们遇到了需要引入连接池的情况,我们面前有4个选项。

DBCP2 C3P0 Tomcat JDBC HikariCP

我们根据我们的标准进行了一些测试和比较,决定去HikariCP。 阅读这篇文章,它解释了为什么我们选择HikariCP。

本文中还提到了另一种替代方案Proxool。

您可能会发现为什么Hibernate在其默认连接池实现中捆绑c3p0 ?

DBCP已经过时,不能生产。前段时间,我们对这两者进行了内部分析,创建了一个测试fixture,针对这两者生成负载和并发性,以评估它们在现实生活条件下的适用性。

DBCP始终在我们的测试应用程序中生成异常,并且难以达到C3P0在没有任何异常的情况下处理的性能水平。

C3P0还健壮地处理了DB断开和恢复上的透明重新连接,而DBCP永远不会恢复连接,如果链接从下面被取出。更糟糕的是,DBCP将Connection对象返回给底层传输中断的应用程序。

从那时起,我们已经在4个主要的重载消费者web应用程序中使用了C3P0,并且从未回头。

更新:经过多年的搁置,Apache Commons终于将DBCP从休眠状态中解放出来,现在它又一次成为了一个积极开发的项目。因此,我原来的帖子可能已经过时了。

也就是说,我还没有体验过这个新升级的库的性能,也没有听说过它在任何最新的应用程序框架中。

对于与DBCP的自动重新连接问题,是否尝试使用以下2个配置参数?

validationQuery="Some Query"

testOnBorrow=true

不幸的是,它们都过时了。DBCP最近更新了一些,另外两个已经有2-3年的历史了,有很多突出的bug。