Hibernate的几种连接池设置C3P0、Proxool和DBCP (转)


接池为我们开发带来了极大的便利,它为我们开发者承担了数据库连接管理的压力,让我们从烦琐的数据库事务中解脱出来,专心研究业务逻辑实现业务,是我们的一大福音。 本文分析的Hibernate连接池配置方案,为读者提供了多种选择。建议读者也根据自己的实际情况来选取方案。文中肯定还有很多纰漏之处,还望大家斧正。讲的不足的地方,以后有机会定当补全!

        1Hibernate默认连接池        
<? xml version = ' 1.0 '  encoding = ' UTF-8 ' ?>
<! DOCTYPE hibernate - configuration
PUBLIC 
" -//Hibernate/Hibernate Configuration DTD//EN "   " http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd " >
< hibernate - configuration >
< session - factory  >
<!-- JDBC驱动程序 -->
< property name = " connection.driver_class " > com.mysql.jdbc.Driver </ property >

 

<!--  连接数据库的URL -->
< property name = " connection.url " >  
       jdbc:mysql:
// localhost:3306/schoolproject
</ property >
< property name = " connection.useUnicode " > true </ property >
< property name = " connection.characterEncoding " > UTF - 8 </ property >

<!-- 连接的登录名 -->
< property name = " connection.username " > root </ property >

<!-- 登录密码 -->
< property name = " connection.password " >sa</ property >

< !--连接最大数据-->
< property name="hibernate.connection.pool_size">20</property>


<!-- 是否将运行期生成的SQL输出到日志以供调试 -->
< property name = " show_sql " > true </ property >

<!-- 指定连接的语言 -->
< property name = " dialect " > org.hibernate.dialect.MySQLDialect </ property >

<!-- 映射Student这个资源 -->
< mapping resource = " com/wqbi/model/pojo/student.hbm.xml "   />

</ session - factory >  
</ hibernate - configuration >

     
         2C3P0连接配置

<? xml version = ' 1.0 '  encoding = ' UTF-8 ' ?>
<! DOCTYPE hibernate - configuration
PUBLIC 
" -//Hibernate/Hibernate Configuration DTD//EN "
" http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd " >

< hibernate - configuration >
< session - factory  >
<!? JDBC驱动程序 -->
< property name = " connection.driver_class " > com.mysql.jdbc.Driver </ property >

<!--  连接数据库的URL -->
< property name = " connection.url " >  
jdbc:mysql:
// localhost:3306/schoolproject
</ property >

< property name = " connection.useUnicode " > true </ property >
< property name = " connection.characterEncoding " > UTF - 8 </ property >

<!-- 连接的登录名 -->
< property name = " connection.username " > root </ property >

<!-- 登录密码 -->
< property name = " connection.password " ></ property >

<!--  C3P0连接池设定 -->

< property name = " hibernate.connection.provider_class " > org.hibernate.connection.C3P0ConnectionProvider </ property >
< !-- 最大连接数 -->

< property name = " hibernate.c3p0.max_size " > 20 </ property >
<!-- 最小连接数 -->
< property name = " hibernate.c3p0.min_size " > 5 </ property >
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
< property name = " hibernate.c3p0.timeout " > 120 </ property >
<!-- 最大的PreparedStatement的数量 -->
< property name = " hibernate.c3p0.max_statements " > 100 </ property >
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
< property name = " hibernate.c3p0.idle_test_period " >12 0 </ property >
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
< property name = " hibernate.c3p0.acquire_increment " > 2 </ property >


<!-- 是否将运行期生成的SQL输出到日志以供调试 -->
< property name = " show_sql " > true </ property >
<!-- 指定连接的语言 -->
< property name = " dialect " > org.hibernate.dialect.MySQLDialect </ property >

<!-- 映射Student这个资源 -->
< mapping resource = " com/wqbi/model/pojo/student.hbm.xml "   />

</ session - factory >  
</ hibernate - configuration >

        //还有在classespath中加入c3p0-0.8.4.5.jar 
        

        3 . proxool 连接池
        (1) 先写proxool的配置文件,文件名:proxool.xml(一般放在与hibernate.cfg.xml文件在同一个目录中)本例配置的是MYSQL数据库,数据库的名字为schoolproject       
<? xml version = " 1.0 "  encoding = " UTF-8 " ?>  
<!--  the proxool configuration can be embedded within your own application ' s. 
Anything outside the  " proxool "  tag is ignored.  -->  
< something - else - entirely >
< proxool >
<!-- 连接池的别名 -->
< alias > DBPool </ alias >
<!-- proxool只能管理由自己产生的连接 -->

< driver - url >
jdbc:mysql:
// localhost:3306/schoolproject?useUnicode=true&characterEncoding=UTF8
</ driver - url >



<!? JDBC驱动程序 -->
< driver - class > com.mysql.jdbc.Driver </ driver - class >
< driver - properties >
< property name = " user "  value = " root " />
< property name = " password "  value = "" />
</ driver - properties >  

<!--  proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回
收,超时的销毁
-->  
< house - keeping - sleep - time > 90000 </ house - keeping - sleep - time >

<!--  指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的
用户连接就不会被接受
-->  
< maximum - new - connections > 20 </ maximum - new - connections >
<!--  最少保持的空闲连接数 -->  
< prototype - count > 5 </ prototype - count >

<!--  允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的
等待请求数由maximum
- new - connections决定 -->  
< maximum - connection - count > 100 </ maximum - connection - count >

<!--  最小连接数 -->
< minimum - connection - count > 10 </ minimum - connection - count >

</ proxool >  
</ something - else - entirely >
        (2) 配置 hibernate.cfg.xml 文件         
<? xml version = ' 1.0 '  encoding = ' UTF-8 ' ?>
<! DOCTYPE hibernate - configuration
PUBLIC 
" -//Hibernate/Hibernate Configuration DTD//EN "
" http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd " >
< hibernate - configuration >
< session - factory  >
< property name = " hibernate.connection.provider_class " >
org.hibernate.connection.ProxoolConnectionProvider
</ property >
< property name = " hibernate.proxool.pool_alias " > DBPool </ property >
< property name = " hibernate.proxool.xml " > proxoolconf.xml </ property >

<!-- 是否将运行期生成的SQL输出到日志以供调试 -->
< property name = " show_sql " > true </ property >
<!-- 指定连接的语言 -->
< property name = " dialect " > org.hibernate.dialect.MySQLDialect </ property >

<!-- 映射Student这个资源 -->
< mapping resource = " com/wqbi/model/pojo/student.hbm.xml "   />

</ session - factory >  
</ hibernate - configuration >
        (1) hibernate.connection.provider_class 定义 Hibernate 的连接加载类,这里 Proxool 连接池是用这个,不同的连接池有不同的加载类,可以查阅 Hibernate 文档获取相关信息
        (2) hibernate.proxool.pool_alias 这里就是用我们上面提到的连接池的别名
        (3) hibernate.proxool.xml 是向Hibernate声明连接池的配置文件位置,可以用相对或绝对路径,用相对路径时要注意一定在要Path范围内!不然会抛出异常。
       (4) dialect 是声明SQL语句的方言
       (5) show_sql 定义是否显示Hibernate生成的SQL语言,一般在调试阶段设为true,完成后再改成false,这样有利于调试。
       
       //还要在classespath中加入proxool-0.8.3.jar 


        4.DBCP连接池
 
       在hibernate.cfg.xml里面加入  
< property name = " dbcp.maxActive " > 100 </ property >  
< property name = " dbcp.whenExhaustedAction " > 1 </ property >  
< property name = " dbcp.maxWait " > 60000 </ property >  
< property name = " dbcp.maxIdle " > 10 </ property >  

< property name = " dbcp.ps.maxActive " > 100 </ property >  
< property name = " dbcp.ps.whenExhaustedAction " > 1 </ property >  
< property name = " dbcp.ps.maxWait " > 60000 </ property >  
< property name = " dbcp.ps.maxIdle " > 10 </ property >  
      //还要加入还有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar.      
     在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现 dbcp有BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。proxool不少行家推荐使用.c3p0占用资源比较大,效率也不高.


    5. JNDI 连接池,数据源已经由应用服务配置好 (Web 服务器 )Hibernate 需要做的只是通过 JNDI 名查找到此数据源。应用服务器将连接池对外显示为 JNDI 绑定数据源,它是 javax.jdbc.Datasource 类的一个实例。只要配置一个 Hibernate 文件,如:    
hibernate.connection.datasource = java: / comp / env / jdbc / schoolproject  // JNDI名
hibernate.transaction.factory_class  =  org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_loopup_class
= org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect
= org.hibernate.dialect.MySQLDialect

          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值