Hibernate 4 连接池

    我们已经进入了 Hibernate 4 的状态,在这里我们可以更改系统后面的数据库以用于生产用途(因此,H2 数据库就不存在了)。

    现在该看一下连接池了,因为 Hibernate 的默认连接池机制是基本的,仅提供给开发和测试使用。

    为了获得最佳性能和稳定性,需要使用第三方工具。 市场上有一些产品,其中大多数是免费的,您可以将它们与 Hibernate 一起轻松使用。

    就像《星球大战》中的黄金翻译和协议机器人一样,主要使用的连接池供应器称为 c3p0。

    C3P0 是一个开源连接池,它具有一个 Hibernate 包,您可以将其添加为项目的依赖项,并准备配置该池:

    c3p0 连接池的最重要的配置属性如下:

    • :池中的最小 JDBC 连接数。 Hibernate 默认值:1
    • c3p0.max_size:池中最大 JDBC 连接数。 Hibernate 默认值:100
    • c3p0.timeout:从池中删除空闲连接时(秒)。 Hibernate 默认值:0,永不过期。
    • c3p0.max_statements:将缓存准备好的语句数。 提高性能。 Hibernate 默认值:0,禁用缓存。

    要使用您的应用配置 C3P0,您需要设置以下属性。 在这种情况下,让我们在hibernate.cfg.xml中查看基于 XML 的已知配置:

    1. <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
    2. <property name="hibernate.c3p0.min_size">1</property>
    3. <property name="hibernate.c3p0.max_size">19</property>
    4. <property name="hibernate.c3p0.timeout">120</property>
    5. <property name="hibernate.c3p0.max_statements">10</property>

    如果在启动服务器时仔细查看日志或控制台输出,则应该看到正在配置 C3P0:

    Proxool 是 C3P0 的替代连接池,但是它需要更多配置,因此我个人更喜欢 C3P0。

    仅设置依赖项和属性是不够的,您需要一个额外的 XML 文件,其中包含 Proxool 的配置信息。

    依赖项几乎与 C3P0 相同:

    1. <dependency>
    2. <artifactId>hibernate-proxool</artifactId>
    3. <version>4.3.10.Final</version>
    4. </dependency>

    Proxool 的配置

    如前所述,仅在hibernate.cfg.xml文件中配置 Proxool 是不够的,您还需要一个单独的 XML 文件:

    与第一行的 C3P0 一样,hibernate.connection.provider_class是可选的。

    hibernate.proxool.xml属性中提到了 XML 文件。

    1. <proxool>
    2. <alias>proxool</alias>
    3. <driver-url>jdbc:h2:file:./example;DB_CLOSE_DELAY=-1;MVCC=TRUE</driver-url>
    4. <driver-properties>
    5. <property name="user" value="sa"></property>
    6. <property name="password" value=""></property>
    7. </driver-properties>
    8. <minimum-connection-count>10</minimum-connection-count>
    9. <maximum-connection-count>20</maximum-connection-count>
    10. </proxool-config>

    如您所见,您必须在 Proxool 中提供数据库连接。 这是强制性的。 但是,由于这个原因,您可以从hibernate.cfg.xml文件中保留连接配置。

    Proxool 存在一个缺点:您必须定义要使用的方言。 使用 C3P0 和默认的 Hibernate 配置,您无需设置要使用的方言,但 Proxool 需要此信息。

    如果一切都已设置好,则在启动应用时,您可以在日志中或控制台上看到以下条目:

    org.hibernate.proxool.internal.ProxoolConnectionProvider配置

    Hibernate 使用其魔力来根据您配置的属性来标识要使用的连接池供应器。 但是,您可以使用hibernate.connection.provider_class属性定义连接供应器。

    如果未配置连接池,则使用默认值。 启动应用时,它在日志或控制台输出中可见:

    有一些连接池供应器,您可以轻松地将它们与 Hibernate 绑定在一起,从而为您提供良好的数据库连接体验。