Hibernate 4 连接池
原文: https://javabeginnerstutorial.com/hibernate/connection-pooling-with-hibernate-4/
我们已经进入了 Hibernate 4 的状态,在这里我们可以更改系统后面的数据库以用于生产用途(因此,H2 数据库就不存在了)。
现在该看一下连接池了,因为 Hibernate 的默认连接池机制是基本的,仅提供给开发和测试使用。
为了获得最佳性能和稳定性,需要使用第三方工具。 市场上有一些产品,其中大多数是免费的,您可以将它们与 Hibernate 一起轻松使用。
C3P0
就像《星球大战》中的黄金翻译和协议机器人一样,主要使用的连接池供应器称为 c3p0。
C3P0 是一个开源连接池,它具有一个 Hibernate 包,您可以将其添加为项目的依赖项,并准备配置该池:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.3.10.Final</version>
</dependency>
c3p0 连接池的最重要的配置属性如下:
c3p0.min_size
:池中的最小 JDBC 连接数。 Hibernate 默认值:1c3p0.max_size
:池中最大 JDBC 连接数。 Hibernate 默认值:100c3p0.timeout
:从池中删除空闲连接时(秒)。 Hibernate 默认值:0,永不过期。c3p0.max_statements
:将缓存准备好的语句数。 提高性能。 Hibernate 默认值:0,禁用缓存。c3p0.idle_test_period
– 自动验证连接之前的空闲时间(以秒为单位)。 Hibernate 默认值:0
C3P0 的配置
要使用您的应用配置 C3P0,您需要设置以下属性。 在这种情况下,让我们在hibernate.cfg.xml
中查看基于 XML 的已知配置:
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.max_size">19</property>
<property name="hibernate.c3p0.timeout">120</property>
<property name="hibernate.c3p0.max_statements">10</property>
连接供应器的第一行是可选的,您不必输入它,Hibernate 会知道您正在使用 C3P0。 这是因为位置(包结构)在 Hibernate 版本之间可能会发生变化,并且每次更新到连接供应器类位于不同位置的较新版本时,都会遇到麻烦,这很容易让人感到头痛。
如果在启动服务器时仔细查看日志或控制台输出,则应该看到正在配置 C3P0:
org.hibernate.c3p0.internal.C3P0ConnectionProvider configure
Proxool
Proxool 是 C3P0 的替代连接池,但是它需要更多配置,因此我个人更喜欢 C3P0。
仅设置依赖项和属性是不够的,您需要一个额外的 XML 文件,其中包含 Proxool 的配置信息。
依赖项几乎与 C3P0 相同:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-proxool</artifactId>
<version>4.3.10.Final</version>
</dependency>
Proxool 的配置
如前所述,仅在hibernate.cfg.xml
文件中配置 Proxool 是不够的,您还需要一个单独的 XML 文件:
<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<property name="hibernate.proxool.pool_alias">proxool</property>
<property name="hibernate.proxool.xml">proxool.xml</property>
与第一行的 C3P0 一样,hibernate.connection.provider_class
是可选的。
在hibernate.proxool.xml
属性中提到了 XML 文件。
proxool.xml
包含以下内容:
<proxool-config>
<proxool>
<alias>proxool</alias>
<driver-url>jdbc:h2:file:./example;DB_CLOSE_DELAY=-1;MVCC=TRUE</driver-url>
<driver-class>org.h2.Driver</driver-class>
<driver-properties>
<property name="user" value="sa"></property>
<property name="password" value=""></property>
</driver-properties>
<minimum-connection-count>10</minimum-connection-count>
<maximum-connection-count>20</maximum-connection-count>
</proxool>
</proxool-config>
如您所见,您必须在 Proxool 中提供数据库连接。 这是强制性的。 但是,由于这个原因,您可以从hibernate.cfg.xml
文件中保留连接配置。
Proxool 存在一个缺点:您必须定义要使用的方言。 使用 C3P0 和默认的 Hibernate 配置,您无需设置要使用的方言,但 Proxool 需要此信息。
如果一切都已设置好,则在启动应用时,您可以在日志中或控制台上看到以下条目:
org.hibernate.proxool.internal.ProxoolConnectionProvider
配置
一般关于配置
Hibernate 使用其魔力来根据您配置的属性来标识要使用的连接池供应器。 但是,您可以使用hibernate.connection.provider_class
属性定义连接供应器。
如果未配置连接池,则使用默认值。 启动应用时,它在日志或控制台输出中可见:
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
总结
有一些连接池供应器,您可以轻松地将它们与 Hibernate 绑定在一起,从而为您提供良好的数据库连接体验。
配置这些供应器很容易,因为大多数供应器都可以将其 Hibernate 集成包作为项目的依赖项导入,并使所有程序运行。