我最近在一个基于Spring和Hibernate的项目中从C3P0迁移到HikariCP,这并不像我想象的那么容易,所以我在这里分享我的发现。
如果是Spring Boot项目,请查看我的答案这里
我的设置如下:
- Spring 4.3.8+
- Hiberante 4.3.8+
- Gradle 2.x
- PostgreSQL 9.5
以下一些配置与上面的某些答案相似,但也有不同之处。
Gradle相关
为了引入正确的jar包,我需要引入以下jar包:
compile 'org.postgresql:postgresql:42.2.0'
compile('com.zaxxer:HikariCP:2.7.6') {
exclude group: 'org.hibernate', module: 'hibernate-core'
}
compile('org.hibernate:hibernate-hikaricp:4.3.8.Final') {
exclude group: 'org.hibernate', module: 'hibernate-core'
exclude group: 'com.zaxxer', module: 'HikariCP'
}
compile('org.slf4j:slf4j-simple:1.7.25')
compile('org.slf4j:slf4j-log4j12:1.7.25') {
exclude group: 'log4j', module: 'log4j'
}
基于Spring/Hibernate的配置
为了让Spring和Hibernate使用Hikari连接池,您需要定义HikariDataSource
并将其输入到下面显示的sessionFactory
bean中。
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="poolName" value="SpringHikariPool" />
<property name="dataSourceClassName" value="org.postgresql.ds.PGSimpleDataSource" />
<property name="maximumPoolSize" value="20" />
<property name="idleTimeout" value="30000" />
<property name="dataSourceProperties">
<props>
<prop key="serverName">localhost</prop>
<prop key="portNumber">5432</prop>
<prop key="databaseName">dbname</prop>
<prop key="user">dbuser</prop>
<prop key="password">dbpassword</prop>
</props>
</property>
</bean>
<bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" id="sessionFactory">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.provider_class">org.hibernate.hikaricp.internal.HikariCPConnectionProvider</prop>
</props>
</property>
</bean>
如果以上步骤设置完成后,您需要向log4j或logback
中添加一个条目,并将level
设置为DEBUG
,以查看Hikari
连接池的启动。
Log4j1.2
<!
<logger additivity="false" name="com.zaxxer.hikari">
<level value="debug"/>
<!
</logger>
Logback
通过在Spring Boot
中的application.properties
文件进行配置
debug=true
logging.level.com.zaxxer.hikari.HikariConfig=DEBUG
使用 logback.xml
<logger name="com.zaxxer.hikari" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
有了以上内容,你就可以顺利使用了!显然,为了实现承诺的性能,你需要自定义HikariCP
连接池配置。