Hibernate:什么是连接池,为什么默认的连接池不适合生产?

时间:2011-02-02 22:20:48

标签: hibernate connection-pooling

我对Hibernate非常不熟悉,刚刚开始研究一个将它与MySQL数据库一起使用的Web应用程序。我注意到community documentation tutorial状态:

  

内置的Hibernate连接池绝不适合生产使用。它缺乏在任何体面的连接池上找到的几个功能。

有人可以详细说明吗?究竟是什么遗漏了,人们对“默认”问题有什么问题?在谷歌上搜索我发现了一个网站here,但它并没有真正解释问题,而是你应该使用的是什么。

3 个答案:

答案 0 :(得分:50)

  

什么是连接池,为什么默认的连接池不适合生产?有人可以详细说明吗?

连接池是一种打开/准备/关闭连接的技术。连接池机制是一个软件(组件),您委派管理连接的功能。您的应用程序只需要连接,使用它,然后将其发送回池中。该组件负责打开N个连接,并在应用程序请求时为其准备好。如果连接过时,则池化机制将关闭它并重新打开一个新连接。这表示更好地使用连接,因为您不需要等待在实际执行代码期间建立连接,并且您不必担心过时的连接。

Hibernate并没有真正提供任何真正的连接池机制。它提供了一个内部连接管理器,这是非常基本的。原因很简单:几乎(如果不是全部)应用服务器(如JBoss AS)和Servlet容器(如Tomcat)默认提供连接池机制。因此,您的应用程序不必担心有关它的详细信息。它只是要求AS进行连接。

在我看来,只有两种情况需要担心连接池:

  1. 您正在处理独立应用程序(不在容器内运行)
  2. 您真的是连接池方面的专家,而且没有一个适合您的需求。
  3. 但根据我的经验,大多数使用“外部”连接池的人都是因为缺乏关于连接池缺乏关于其容器的知识的知识。

答案 1 :(得分:2)

当您处理独立应用程序时,有几个池管理器尚未由Hibernate维护。 Hibernate从不偏爱一个明确的。多年来,许多人再次来到这里。最终判断哪个是最好的很难。最好自己检查和比较项目以及这些项目的活跃程度。

以下是按字母顺序排列的独立应用程序的最新(2017)汇集建议:

C3P0 http://www.mchange.com/projects/c3p0/

Hikari https://github.com/brettwooldridge/HikariCP

Vibur http://www.vibur.org/

答案 2 :(得分:-6)

hibernate中的默认连接池是c3p0,以星球大战角色命名。但是hibernate也支持proxool并且还用于宣传apache dbcp。有一段时间,DBCP处于休眠状态并且失去了优雅。

C3P0实际上在许多项目中用于生产。虽然有时发现它在高峰时间表现不佳。有几种选择。比如Tomcat 7中包含的新连接池。虽然我还没有测试过它,但是听到了一些关于它的正面反馈。