ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Hibernate 4 连接池 > 原文: [https://javabeginnerstutorial.com/hibernate/connection-pooling-with-hibernate-4/](https://javabeginnerstutorial.com/hibernate/connection-pooling-with-hibernate-4/) 我们已经进入了 Hibernate 4 的状态,在这里我们可以更改系统后面的数据库以用于生产用途(因此,H2 数据库就不存在了)。 现在该看一下连接池了,因为 Hibernate 的默认连接池机制是基本的,仅提供给开发和测试使用。 为了获得最佳性能和稳定性,需要使用第三方工具。 市场上有一些产品,其中大多数是免费的,您可以将它们与 Hibernate 一起轻松使用。 ## C3P0 就像《星球大战》中的黄金翻译和协议机器人一样,主要使用的连接池供应器称为 c3p0。 C3P0 是一个开源连接池,它具有一个 Hibernate 包,您可以将其添加为项目的依赖项,并准备配置该池: ```java <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>4.3.10.Final</version> </dependency> ``` c3p0 连接池的最重要的配置属性如下: * `c3p0.min_size`:池中的最小 JDBC 连接数。 Hibernate 默认值:1 * `c3p0.max_size`:池中最大 JDBC 连接数。 Hibernate 默认值:100 * `c3p0.timeout`:从池中删除空闲连接时(秒)。 Hibernate 默认值:0,永不过期。 * `c3p0.max_statements`:将缓存准备好的语句数。 提高性能。 Hibernate 默认值:0,禁用缓存。 * `c3p0.idle_test_period` – 自动验证连接之前的空闲时间(以秒为单位)。 Hibernate 默认值:0 ### C3P0 的配置 要使用您的应用配置 C3P0,您需要设置以下属性。 在这种情况下,让我们在`hibernate.cfg.xml`中查看基于 XML 的已知配置: ```java <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: ```java org.hibernate.c3p0.internal.C3P0ConnectionProvider configure ``` ## Proxool Proxool 是 C3P0 的替代连接池,但是它需要更多配置,因此我个人更喜欢 C3P0。 仅设置依赖项和属性是不够的,您需要一个额外的 XML 文件,其中包含 Proxool 的配置信息。 依赖项几乎与 C3P0 相同: ```java <dependency>    <groupId>org.hibernate</groupId>    <artifactId>hibernate-proxool</artifactId>    <version>4.3.10.Final</version> </dependency> ``` ### Proxool 的配置 如前所述,仅在`hibernate.cfg.xml`文件中配置 Proxool 是不够的,您还需要一个单独的 XML 文件: ```java <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`包含以下内容: ```java <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`属性定义连接供应器。 如果未配置连接池,则使用默认值。 启动应用时,它在日志或控制台输出中可见: ```java org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure ``` ## 总结 有一些连接池供应器,您可以轻松地将它们与 Hibernate 绑定在一起,从而为您提供良好的数据库连接体验。 配置这些供应器很容易,因为大多数供应器都可以将其 Hibernate 集成包作为项目的依赖项导入,并使所有程序运行。