首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了。 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放。如果频繁的数据库操作,就会导致性能很低。连接池的出现,为开发过程提供了一个很好的管理平台。当程序中需要建立数据库连接时,只须从内存中取一个来用而不用新建。同样,使用完毕后,只需放回内存即可。而连接的建立、断开都有连接池自身来管理。同时,我们还可以通过设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数等等。通过使用连接池,将大大提高程序效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
而Hibernate的出现把连接池的使用引入了一个新的利用方式,让你充分享受配置化给开发带来的便利。
1 C3P0 (以验证可用)
只需在hibernate.cfg.xml中加入
jdbc:oracle:thin:@10.142.1.138:1521:omds
oracle.jdbc.driver.OracleDriver
org.hibernate.dialect.Oracle9Dialect
org.hibernate.connection.C3P0ConnectionProvider oracle10g_112
还有在classespath中加入c3p0-0.8.4.5.jar
2 dbcp(hibernate3.0中,已经不支持dbcp)
在hibernate.cfg.xml中加入
jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK
还有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar.
3 proxool (有问题,暂时不可用)
在hibernate.cfg.xml中加入: org.hibernate.dialect.Oracle9Dialect
oracle10g_112
org.hibernate.connection.ProxoolConnectionProvider
然后,在和hibernate.cfg.xml同一个目录下,加一个ProxoolConf.xml文件,内容为
并在classespath中加入proxool-0.8.3.jar 4 结论
由于在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp有BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。我不知是否在dbcp最新版本中解决了这个问题,我以前在一个访问量不大的项目中用过dbcp,运行了一年多都没出现问题。不过在网上的确也有不少网友指出dbcp在大型的应用中会出现不稳定的情况。所以在真相未经证实的情况下,我觉得对dbcp持慎重的态度。
至于c3p0,有评论说它的算法不是最优的,而且,我在matrix中,见到有网友做了一个实验,在同一项目中分别用了几个常用的连接池,然后测试其性能,发现c3p0占用资源比较大,效率也不高。
所以,基于上述原因,我才花两晚的时间去研究proxool的配置,proxool不少行家推荐使用,而且暂时来说,是负面评价是最少的一个。在三星中也有项目是用proxool的。
欢迎大家就连接池的问题多研究,多多发表自己的经验心得。
因篇幅问题不能全部显示,请点此查看更多更全内容