转载:Hibernate的三种链接池设置C3P0、Proxool和DBCP |
|
如下三种链接都是以链接MySQl为例。
org.gjt.mm.mysql.Driver
jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK
root
8888
上面的一段配置,在c3p0和dbcp中,都是必需的,由于hibernate会根据上述的配置来生成connections,再交给c3p0或dbcp 管理.可是,proxool则不能,虽说服文档上说proxool也能够和hibernate结合,但我按照官方文档上的说明怎么配也出错,并且,到了 sun和hibernat有的官方网站上问了几天,都没有一我的回复。后来我只能让proxool自身来生成链接,这在下面再讲。 1 C3P0 只需在hibernate.cfg.xml中加入
5
30
1800
50
还有在classespath中加入c3p0-0.8.4.5.jar 2 dbcp 在hibernate.cfg.xml中加入
100
1
60000
10
100
1
60000
10
还有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar. 3 proxool 在hibernate.cfg.xml中加入
pool1
ProxoolConf.xml
net.sf.hibernate.connection.ProxoolConnectionProvider
而后,在和hibernate.cfg.xml同一个目录下,加一个ProxoolConf.xml文件,内容为
pool1
jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK
org.gjt.mm.mysql.Driver
90000
20
5
100
10
并在classespath中加入proxool-0.8.3.jar 结论: 因为在hibernate3.0中,已经再也不支持dbcp了,hibernate的做者在hibernate.org中,明确指出在实践中发现dbcp有 BUG,在某些种情会产生不少空链接不能释放,因此抛弃了对dbcp的支持。我不知是否在dbcp最新版本中解决了这个问题,我之前在一个访问量不大的项 目中用过dbcp,运行了一年多都没出现问题。不过在网上的确也有很多网友指出dbcp在大型的应用中会出现不稳定的状况。因此在真相未经证明的状况下, 我以为对dbcp持慎重的态度。 至于c3p0,有评论说它的算法不是最优的,并且,我在matrix中,见到有网友作了一个实验,在同一项目中分别用了几个经常使用的链接池,而后测试其性 能,发现c3p0占用资源比较大,效率也不高。 因此,基于上述缘由,我才花两晚的时间去研究proxool的配置,proxool很多行家推荐使用,并且暂时来讲,是负面评价是最少的一个。在三星中也 有项目是用proxool的。 |
Hibernate支持DBCP包进行数据库链接池的配置。简要说明配置过程:
(仅仅是我的摸索,若有问题,欢迎指点)
须要的包:
Commons-Pool (下载地址:http://jakarta.apache.org/commons/pool/) :提供一个通常对象池的接口,并且包含实现了一般池工具箱。
Commons-DBCP(下载地址:http://jakarta.apache.org/commons/dbcp/) :提供数据库链接池服务。DBCP很聪明,把Commons-Pool和JDBC的driver封装起来,使达到链接池的目的。
Hibernate属性文件的配置参数
#链接池的最大活动个数
hibernate.dbcp.maxActive 100
#当链接池中的链接已经被耗尽的时候,DBCP将怎样处理( 0 = 失败, 1 = 等待, 2= 增加)
hibernate.dbcp.whenExhaustedAction 1
#最大等待时间
hibernate.dbcp.maxWait 120000
#没有人用链接的时候,最大闲置的链接个数。
hibernate.dbcp.maxIdle 10
##如下是对prepared statement的处理,同上。
hibernate.dbcp.ps.maxActive 100
hibernate.dbcp.ps.whenExhaustedAction 1
hibernate.dbcp.ps.maxWait 120000
hibernate.dbcp.ps.maxIdle 10
## 可选,是否对池化的链接进行验证
#给出一条简单的sql语句进行验证
#hibernate.dbcp.validationQuery select 1 from dual
#在取出链接时进行有效验证
#hibernate.dbcp.testOnBorrow true
#在放回链接时进行有效验证
#hibernate.dbcp.testOnReturn false
#Hibernate已经实现了DBCP Provider实现,别忘了在下面的键值去掉#字符
hibernate.connection.provider_class net.sf.hibernate.connection.DBCPConnectionProvider