使用 HikariCP 配置 Hibernate

问题描述 投票:0回答:3

由于 c3p0 连接池存在问题,我想查看替代方案并决定哪一个在我的情况下更可用。 HikariCP 看起来很有前途,但没有文档如何将它与 Hibernate 一起使用。

到目前为止我使用c3p0如下:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="persistenceUnit"/>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">${database.dialect}</prop>
            <prop key="hibernate.hbm2ddl.auto">${database.structure}</prop>
            <prop key="hibernate.connection.url">${database.connection}</prop>
            <prop key="hibernate.connection.username">${database.username}</prop>
            <prop key="hibernate.connection.password">${database.password}</prop>
            <prop key="hibernate.connection.driver_class">${database.driver}</prop>
            <prop key="hibernate.connection.shutdown">true</prop>
            <prop key="hibernate.connection.writedelay">0</prop>
            <prop key="hibernate.connection.characterEncoding">UTF-8</prop>
            <prop key="hibernate.connection.charSet">UTF-8</prop>
            <prop key="hibernate.show_sql">${database.show_sql}</prop>
            <prop key="hibernate.format_sql">false</prop>
            <prop key="hibernate.ejb.metamodel.generation">disabled</prop>
            <!-- Use the C3P0 connection pool provider -->
            <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
            <prop key="hibernate.c3p0.min_size">5</prop>
            <prop key="hibernate.c3p0.max_size">30</prop>
            <prop key="hibernate.c3p0.timeout">300</prop>
            <prop key="hibernate.c3p0.max_statements">50</prop>
            <prop key="hibernate.c3p0.idle_test_period">600</prop>
        </props>
    </property>

有人可以指点我如何以这种方式配置 HikariCP 吗?

java hibernate database-connection c3p0 hikaricp
3个回答
34
投票

您可以使用由

org.hibernate.hikaricp.internal.HikariCPConnectionProvider
包裹运送的
hibernate-hikaricp

您可以将其安装为 Maven 依赖项(请不要忘记更新版本号):

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-hikaricp</artifactId>
    <version>5.2.10.Final</version>
</dependency>

并在

hibernate.properties
文件中进行配置,如下所示:

hibernate.connection.provider_class=org.hibernate.hikaricp.internal.HikariCPConnectionProvider

请注意:从 Hibernate 4.3.6 开始,您应该不再使用

com.zaxxer.hikari.hibernate.HikariConnectionProvider
(请参阅:https://github.com/brettwooldridge/HikariCP/wiki/Hibernate4


11
投票

HikariCP,从版本 1.2.6 开始,现在通过 ConnectionProvider 显式支持 Hibernate 4.x。有关详细信息,请参阅新的 wiki 文档


5
投票

更新:请参阅下面 uwolfer 的答案,它现在是在 Hibernate 中使用 HikariCP 的官方方法。

我是 HikariCP 的作者之一。我并不声称自己是 Spring 人,几年前我就不再使用 Hibernate,但此链接可能会有所帮助:

http://www.luckyryan.com/2013/02/20/spring-mvc-with-basic-persistence-spring-data-jpa-hibernate/

在该页面的 XML 配置部分,他们的示例使用 BoneCP 作为 mainDataSource,只需尝试将该部分替换为 HikariCP 的配置即可。

在上面的示例中,您似乎是通过 Spring 配置 Hibernate 并在 Hibernate 配置中定义

DataSource
,这很好。但另一种选择(该页面上提供)是通过 Spring 单独配置
DataSource
,然后指示 Hibernate 使用它。

关于语句缓存,HikariCP 没有这样做,因为我们认为最好留给供应商的 JDBC 驱动程序/数据源。几乎每个主要数据库供应商的 JDBC

DataSource
都提供语句缓存,并且可以通过 HikariCP 通过指定
DataSource
属性进行配置。请参阅 HikariCP github 页面,了解如何在底层(供应商)
DataSource
上设置属性。

© www.soinside.com 2019 - 2024. All rights reserved.