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

Kry*_*tic 37 hibernate connection-pooling

我对Hibernate非常不熟悉,刚刚开始研究一个将它与MySQL数据库一起使用的Web应用程序.我注意到社区文档教程指出:

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

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

jpk*_*ing 54

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

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

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

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

  1. 您正在处理独立应用程序(不在容器内运行)
  2. 您在连接池方面非常擅长,并且没有一个适合您的需求.

但根据我的经验,大多数使用"外部"连接池的人都是因为缺乏关于连接池的知识缺乏对容器的了解.


Tho*_*mas 6

当您处理独立应用程序时,有几个池管理器尚未由 Hibernate 维护。Hibernate 从不支持显式的。多年来,许多人来过又消失。最后真的很难判断哪个最好。最好亲自检查和比较这些项目以及这些项目的活跃程度。

以下是一些最近(2017 年)针对独立应用程序的池化建议(按字母顺序排列):

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

https://github.com/brettwooldridge/HikariCP

维布尔http://www.vibur.org/

  • 警察先生您好,我的回答只是为来到这里的人们提供帮助。很难判断哪种连接池是合适的。所以我尽量保持中立。当然,你可能会投反对票,但这不是维基百科,它肯定是基于意见的,但没有一个水手会因为在这里有一些链接的答案而死去。所以请尽量不要那么粗鲁。 (2认同)