当前位置: 首页 > 面试题库 >

Java JDBC的连接池选项:DBCP与C3P0

朱运诚
2023-03-14
问题内容

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

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

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

我已经在博客和其他论坛上阅读了很多有关它们的内容,但无法做出决定。

这两个有其他相关选择吗?


问题答案:

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

DBCP始终在我们的测试应用程序中生成异常,并努力达到C3P0能够无任何异常处理的性能水平。

C3P0还可以稳健地处理数据库断开连接和恢复时的透明重新连接,而如果从其下方拔出链接,则DBCP永远不会恢复连接。更糟糕的是,DBCP会将连接对象返回到基础传输中断的应用程序。

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

更新:事实证明,经过多年搁置,Apache Commons员工使DBCP脱离了hibernate状态,现在它又是一个积极开发的项目。因此,我的原始帖子可能已过时。

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



 类似资料:
  • 使用来自DBCP的BasicDataSource,如果我们执行getConnection()并且在最后一个块中我们关闭连接,它是真的将连接返回到池还是关闭连接。我正在检查的代码片段是这样的 我正在检查BasicDataSource的源代码,并访问了这个包装类以获取连接。 委托对象的类型为java。sql。联系包装器代码调用委托的close方法,该方法将关闭集合,而不是将连接返回到池。这是DBCP的

  • 我正在使用DBCP连接池,并创建了一个MBean来在Jconsole中显示连接池的统计信息。我观察到的是,即使应用程序上没有活动(意味着没有页面点击等),连接池统计数据也会显示活动连接。 我们在上面看到的16个虚拟连接并没有降到零。我不知道为什么?有人能解释一下吗? 谢谢

  • 问题内容: 似乎与我的应用程序有关。每当启动应用程序很长时间(不确定确切的时间)后,我的日志中都会出现以下错误消息。我正在使用Spring + Hibernate + MySQL和ApacheDBCP进行连接池 如果我重新启动URL,则一切正常。我认为这与我的连接池有关。这是我的Apache DBCP设置,MYSQL中的wait_timeout设置为其默认值。(28800秒或8小时)。 在搜索的同

  • 我们很难弄清楚定义的属性,,等等。 我们在以下设置中看到以下错误

  • 在我的程序中,我正在访问wep api。最多可以有7个不同的线程访问web api的不同服务器。每个线程负责一个服务器,每个服务器速率限制每个线程。每个线程更新相同的mysql数据库。线程数保持不变。 在我的示例中,是否需要连接池?我不应该只打开7个不同的连接,这些连接将在程序的生命周期中打开吗?

  • 我读了一些关于Stackoverflow、mkong和Tomcat JDBC池官方文档的链接。我太困惑了。 需要注意的要点: 1) 我知道Oracle通用连接池是一个新概念,不稳定。在此链接中,此人询问OracleDataSource(请注意)链接1 2)所以让我们说UCP是完全不同的。现在Mkong(尊重)有这个教程可用。链接2 3) Tomcat的官方文档链接3上有这个链接 OracleDat