Hibernate连接池

来源:互联网 发布:源码查看 编辑:程序博客网 时间:2024/05/01 08:47

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
原创粉丝点击