Hibernate连接池

1          简介

Hibernate 支持三种连接池组件:DBCP, c3p0, proxool。
其中,在hibernate3.0中,已经不再支持dbcp了,原因是dbcp有BUG,在某些种情会产生很多空连接不能释放,所以Hibernate3抛弃了对dbcp的支持。

2          连接池区别

(1)dbcp与c3p0、proxool区别

dbcp没有自动回收空闲连接的功能。

c3p0和proxool有自动回收空闲连接功能。

hibernate推荐使用c3p0和proxool,尤其是proxool,因为proxool提供连接监控作用。

3          详细介绍

下面分别介绍下c3p0和proxool两种连接池:

3.1 C3P0数据源

C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

hibernate数据源C3P0配置,在hibernate.cfg.xml文件中加入c3p0数据源的配置。

配置文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--配置事务实现方式-->
<property name="transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</property>
<!-- 配置JDBC里batch的大小 -->
<property name="jdbc.batch_size">50</property>
<property name="cache.use_second_level_cache">false</property>
<!--配置线程安全的session-->
<property name="current_session_context_class">thread</property>
<!-- 显示SQL -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- 配置数据库方言 -->
<property name="dialect">org.hibernate.dialect.Oracle9Dialect
</property>
<!-- 配置数据库连接 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.username">0804</property>
<property name="connection.password">0804</property>
<property name="connection.url">jdbc:oracle:thin:@192.168.0.200:1521:orcl</property>
 
<!-- 配置连接池-->
<propertyname="c3p0.max_size">2</property>
<propertyname="c3p0.min_size">2</property>
<propertyname="c3p0.timeout">5000</property>
<propertyname="c3p0.max_statements">100</property>
<propertyname="c3p0.idle_test_period">3000</property>
<propertyname="c3p0.acquire_increment">2</property>
<propertyname="c3p0.validate">false</property>
 
<!-- 指定hibernate管理的映射文件 -->
<mapping resource="com/ket/ruan/so/entity/User.hbm.xml"/>
<mapping resource="com/ket/ruan/so/entity/Product.hbm.xml"/>
...
</session-factory>
</hibernate-configuration> 

3.2 proxool

proxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。

在hibernate中配置proxool数据源,需要先定义一个xml文件,配置proxool数据源的相关参数,可以命名为ProxoolConf.xml,然后在hibernate.cfg.xml文件中通过属性项的方式引入ProxoolConf.xml文件。

3.2.1定义ProxoolConf.xml文件

ProxoolConf.xml 文件一般放在hibernate.cfg.xml文件同级目录

中,并在工程中引入proxool-0.8.3.jar。

   ProxoolConf.xml内容如下:

<?xml version="1.0" encoding="gb2312"?>
<something-else-entirely>
<proxool>
<alias>pool1</alias>
<driver-url>
jdbc:mysql://tpdb:3306/tpdb
</driver-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="username"/>
<property name="password" value="password"/>
<property name="schema" value="tpdb"/>
<!-- 自动重连 -->
<property name="autoReconnect" value="true"/>
</driver-properties>
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),  
侦察到空闲的连接就马上回收,超时的销毁-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受(正式库10,测试库1)-->
<maximum-new-connections>10</maximum-new-connections>
<!-- 最少保持的空闲连接数(正式库10,测试库1)-->
<prototype-count>10</prototype-count>
<!-- 连接池允许的最大连接数(正式库700,测试库10)-->
<maximum-connection-count>700</maximum-connection-count>
<!-- 连接池开启的最小连接数(正式库350,测试库5)-->
<minimum-connection-count>350</minimum-connection-count>
<!-- 一个活动连接的最长时间15分钟,单位毫秒 -->
<maximum-active-time>900000</maximum-active-time>
<!-- 一个连接的最长活动时间4小时,单位毫秒 -->
<maximum-connection-lifetime>14400000
</maximum-connection-lifetime>
<!-- 自动检查连接是否断掉开关 -->
<test-before-use>true</test-before-use>
<!-- 自动检查连接是否断的测试sql语句 -->
<house-keeping-test-sql>select sysdate() from dual
</house-keeping-test-sql>
</proxool>
</something-else-entirely>

3.2.2定义 hibernate.cfg.xml文件配置

引入ProxoolConf.xml文件:

<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!--配置proxool属性-->
<!---使用proxoolConf.xml中定义的别名-->
<propertyname="proxool.pool_alias">pool1</property>
<!--指定使用的proxoolConf文件的位置(这里在SRC下)-->
<propertyname="proxool.xml">ProxoolConf.xml</property>
<propertyname="connection.provider_class">
org.hibernate.connection.ProxoolConnectionProvider
</property>
....
<!-- 指定hibernate管理的映射文件 -->
<mapping resource="com/ket/ruan/so/entity/User.hbm.xml"/>
....
</hibernate-configuration>

3.2.3 proxool连接池监控

在web.xml中加入监控Servlet,代码如下:

<servlet>
<servlet-name>proxool</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.admin.servlet.AdminServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>proxool</servlet-name>
<url-pattern>/Admin/proxool/</url-pattern>
</servlet-mapping>


然后在ie中输入: {home_url} /proxool/

 就可以访问到proxool的监控页面了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值