Hibernate3.X集成 hikariCp连接池

最近一个旧项目,想换个数据库连接池,经考虑决定用hikaricp.由于旧系统spring跟hibernate版本比较旧,创建数据源datasource一直报各种各样的错。后来在hikaricp的github上https://github.com/brettwooldridge/HikariCP/wiki/Hibernate4看到有hibernate4的connection provider。上面建议可以直接拷贝provider代码更改import就可以供hibernate3.x使用。于是试着用了下,没有任何报错,运行也比较稳定。这里贴上provider代码。遇到同样问题的可以直接拿走。hibernate的配置需要改为自己的provider,同时可以配置数据源的属性。

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
import java.util.Properties;

import org.hibernate.HibernateException;
import org.hibernate.Version;
import org.hibernate.connection.ConnectionProvider;
import org.hibernate.exception.Configurable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import com.zaxxer.hikari.hibernate.HikariConfigurationUtil;

import javax.sql.DataSource;

/**
 * Connection provider for Hibernate 4.3.
 *
 * @author Brett Wooldridge, Luca Burgazzoli
 */
public class HikariHibernateConnectionProvider implements ConnectionProvider, Configurable {
	private static final long serialVersionUID = -9131625057941275711L;

	private static final Logger LOGGER = LoggerFactory.getLogger(HikariHibernateConnectionProvider.class);

	/**
	 * HikariCP configuration.
	 */
	private HikariConfig hcfg;

	/**
	 * HikariCP data source.
	 */
	private HikariDataSource hds;

	// *************************************************************************
	//
	// *************************************************************************

	/**
	 * c-tor
	 */
	public HikariHibernateConnectionProvider() {
		this.hcfg = null;
		this.hds = null;
		if (Version.getVersionString().substring(0, 5).compareTo("4.3.6") >= 1) {
			LOGGER.warn("com.zaxxer.hikari.hibernate.HikariConnectionProvider has been deprecated for versions of "
					+ "Hibernate 4.3.6 and newer.  Please switch to org.hibernate.hikaricp.internal.HikariCPConnectionProvider.");
		}
	}

	// *************************************************************************
	// Configurable
	// *************************************************************************
	@Override
	public void configure(Properties arg0) throws HibernateException {
		try {
			LOGGER.debug("Configuring HikariCP");

			this.hcfg = HikariConfigurationUtil.loadConfiguration(arg0);
			this.hds = new HikariDataSource(this.hcfg);

		} catch (Exception e) {
			throw new HibernateException(e);
		}

		LOGGER.debug("HikariCP Configured");
	}

	// *************************************************************************
	// ConnectionProvider
	// *************************************************************************

	@Override
	public Connection getConnection() throws SQLException {
		Connection conn = null;
		if (this.hds != null) {
			conn = this.hds.getConnection();
		}

		return conn;
	}

	@Override
	public void closeConnection(Connection conn) throws SQLException {
		conn.close();
	}

	@Override
	public boolean supportsAggressiveRelease() {
		return false;
	}

	// *************************************************************************
	// Stoppable
	// *************************************************************************

	@Override
	public void close() throws HibernateException {
		this.hds.close();
	}

}

hibernate配置:

<property name="hibernateProperties">
            <props>
                <prop key="hibernate.jdbc.use_scrollable_resultset">
                    true
                </prop>
                <prop key="hibernate.query.substitutions">1</prop>
                <prop key="hibernate.connection.provider_class">
                    xxx.xxx.HikariHibernateConnectionProvider
                </prop>

                <prop key="hibernate.jdbc.batch_versioned_data">
                    true
                </prop>
                <prop key="hibernate.show_sql">${hibernate_show_sql}</prop>
                <prop key="hibernate.format_sql">${hibernate_format_sql}</prop>
                <prop key="hibernate.max_fetch_depth">3</prop>
                <prop key="hibernate.order_updates">true</prop>
                <prop key="hibernate.jdbc.fetch_size">100</prop>
                <prop key="hibernate.jdbc.batch_size">100</prop>
                <!-- <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> -->

                <prop key="hibernate.dialect">${hibernate_dialect}</prop>
                
                <prop key="hibernate.hikari.minimumIdle">5</prop>
                <prop key="hibernate.hikari.maximumPoolSize">10</prop>
                <prop key="hibernate.hikari.idleTimeout">30000</prop>
                <prop key="hibernate.hikari.dataSourceClassName">org.postgresql.ds.PGSimpleDataSource</prop>
                <prop key="hibernate.hikari.dataSource.url">${jdbcUrl}</prop>
                <prop key="hibernate.hikari.dataSource.user">${dbuser}</prop>
                <prop key="hibernate.hikari.dataSource.password">${dbpass}</prop>
                
            </props>
        </property>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值