自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Hibernate連接池配置實(shí)例

開(kāi)發(fā) 后端
本文向您介紹Hibernate的連接池配置,通過(guò)代碼實(shí)例展示三種不同的Hibernate連接池技術(shù)。

Hibernate支持第三方的連接池,官方推薦的連接池是C3P0,Proxool,以及DBCP。在Hibernate連接池配置時(shí)需要注意的有三點(diǎn):

一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已經(jīng)不再推薦使用,官方的解釋是這個(gè)連接池存在缺陷。如果你因?yàn)槟撤N原因需要在Hibernate3中使用DBCP,建議采用JNDI方式。

二、默認(rèn)情況下(即沒(méi)有配置連接池的情況下),Hibernate會(huì)采用內(nèi)建的連接池。但這個(gè)連接池性能不佳,且存在諸多BUG(筆者就曾在Mysql環(huán)境下被八小時(shí)連接懸空問(wèn)題困擾過(guò)),因此官方也只是建議僅在開(kāi)發(fā)環(huán)境下使用。

三、Hibernate2和Hibernate3的命名空間有所變化。例如,配置C3P0時(shí)的provider_class有Hibernate2環(huán)境下使用net.sf.hibernate.connection.C3P0ConnectionProvider,在Hibernate3環(huán)境下使用org.hibernate.connection.C3P0ConnectionProvider。

下面是Hibernate環(huán)境下幾種常見(jiàn)的連接池配置:

1.默認(rèn)Hibernate連接池配置

  1. <?xml version='1.0' encoding='UTF-8'?>    
  2. <!DOCTYPE hibernate-configuration     
  3. PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"     
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">    
  5. <hibernate-configuration>    
  6. <session-factory >    
  7. <!—JDBC驅(qū)動(dòng)程序-->    
  8. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    
  9. <!-- 連接數(shù)據(jù)庫(kù)的URL-->    
  10. <property name="connection.url">      
  11. jdbc:mysql://localhost:3306/schoolproject     
  12. </property>    
  13. <property name="connection.useUnicode">true</property>    
  14. <property name="connection.characterEncoding">UTF-8</property>    
  15. <!--連接的登錄名-->    
  16. <property name="connection.username">root</property>    
  17. <!—登錄密碼-->    
  18. <property name="connection.password"></property>    
  19. <!--是否將運(yùn)行期生成的SQL輸出到日志以供調(diào)試-->    
  20. <property name="show_sql">true</property>    
  21. <!--指定連接的語(yǔ)言-->    
  22. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    
  23. <!--映射Student這個(gè)資源-->    
  24. <mapping resource="com/wqbi/model/pojo/student.hbm.xml" />    
  25. </session-factory>      
  26. </hibernate-configuration>    

 2.C3P0的Hibernate連接池配置

  1. <?xml version='1.0' encoding='UTF-8'?>    
  2. <!DOCTYPE hibernate-configuration     
  3. PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"     
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">    
  5. <hibernate-configuration>    
  6. <session-factory >    
  7. <!—JDBC驅(qū)動(dòng)程序-->    
  8. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    
  9. <!-- 連接數(shù)據(jù)庫(kù)的URL-->    
  10. <property name="connection.url">      
  11. jdbc:mysql://localhost:3306/schoolproject     
  12. </property>    
  13. <property name="connection.useUnicode">true</property>    
  14. <property name="connection.characterEncoding">UTF-8</property>    
  15. <!--連接的登錄名-->    
  16. <property name="connection.username">root</property>    
  17. <!--登錄密碼-->    
  18. <property name="connection.password"></property>    
  19.       
  20. <!-- C3P0連接池設(shè)定-->    
  21. <p    
  22. <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider     
  23. </property>    
  24. <property name="hibernate.c3p0.max_size">20</property>    
  25. <property name="hibernate.c3p0.min_size">5</property>    
  26. <property name="hibernate.c3p0.timeout">120</property>    
  27. <property name="hibernate.c3p0.max_statements">100</property>    
  28. <property name="hibernate.c3p0.idle_test_period">120</property>    
  29. <property name="hibernate.c3p0.acquire_increment">2</property>    
  30. <!--是否將運(yùn)行期生成的SQL輸出到日志以供調(diào)試-->    
  31. <property name="show_sql">true</property>    
  32. <!--指定連接的語(yǔ)言-->    
  33. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    
  34. <!--映射Student這個(gè)資源-->    
  35. <mapping resource="com/wqbi/model/pojo/student.hbm.xml" />    
  36. </session-factory>      
  37. </hibernate-configuration>    
  1. <?xml version="1.0" encoding="UTF-8"?>      
  2. <!-- the proxool configuration can be embedded within your own application's.      
  3. Anything outside the "proxool" tag is ignored. -->      
  4. <something-else-entirely>    
  5. <proxool>    
  6. <!--連接池的別名-->    
  7. <alias>DBPool</alias>    
  8. <!--proxool只能管理由自己產(chǎn)生的連接-->    
  9. <driver-url>    
  10. jdbc:mysql://localhost:3306/schoolproject?useUnicode=true&characterEncoding=UTF8    
  11. </driver-url>    
  12. <!—JDBC驅(qū)動(dòng)程序-->    
  13. <driver-class>com.mysql.jdbc.Driver</driver-class>    
  14. <driver-properties>    
  15. <property name="user" value="root"/>    
  16. <property name="password" value=""/>    
  17. </driver-properties>      
  18. <!-- proxool自動(dòng)偵察各個(gè)連接狀態(tài)的時(shí)間間隔(毫秒),偵察到空閑的連接就馬上回     
  19. 收,超時(shí)的銷毀-->      
  20. <house-keeping-sleep-time>90000</house-keeping-sleep-time>    
  21. <!-- 指因未有空閑連接可以分配而在隊(duì)列中等候的最大請(qǐng)求數(shù),超過(guò)這個(gè)請(qǐng)求數(shù)的     
  22. 用戶連接就不會(huì)被接受-->      
  23. <maximum-new-connections>20</maximum-new-connections>    
  24. <!-- 最少保持的空閑連接數(shù)-->      
  25. <prototype-count>5</prototype-count>    
  26. <!-- 允許最大連接數(shù),超過(guò)了這個(gè)連接,再有請(qǐng)求時(shí),就排在隊(duì)列中等候,最大的     
  27. 等待請(qǐng)求數(shù)由maximum-new-connections決定-->      
  28. <maximum-connection-count>100</maximum-connection-count>    
  29. <!-- 最小連接數(shù)-->    
  30. <minimum-connection-count>10</minimum-connection-count>    
  31. </proxool>      
  32. </something-else-entirely>     

(2)配置hibernate.cfg.xml文件

  1. <?xml version='1.0' encoding='UTF-8'?>    
  2. <!DOCTYPE hibernate-configuration     
  3. PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"     
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">    
  5. <hibernate-configuration>    
  6. <session-factory >    
  7. <property name="hibernate.connection.provider_class">    
  8. org.hibernate.connection.ProxoolConnectionProvider     
  9. </property>    
  10. <property name="hibernate.proxool.pool_alias">DBPool</property>    
  11. <property name="hibernate.proxool.xml">proxoolconf.xml</property>    
  12. <!--是否將運(yùn)行期生成的SQL輸出到日志以供調(diào)試-->    
  13. <property name="show_sql">true</property>    
  14. <!--指定連接的語(yǔ)言-->    
  15. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    
  16. <!--映射Student這個(gè)資源-->    
  17. <mapping resource="com/wqbi/model/pojo/student.hbm.xml" />    
  18. </session-factory>      
  19. </hibernate-configuration>    

(1) hibernate.connection.provider_class定義Hibernate的連接加載類,這里Proxool連接池是用這個(gè),不同 的連接池有不同的加載類,可以查閱Hibernate文檔獲取相關(guān)信息

(2) hibernate.proxool.pool_alias這里就是用我們上面提到的連接池的別名

(3) hibernate.proxool.xml是向Hibernate聲明連接池的配置文件位置,可以用相對(duì)或絕對(duì)路徑,用相對(duì)路徑時(shí)要注意一定在要Path范圍內(nèi)!不然會(huì)拋出異常。

(4) dialect是聲明SQL語(yǔ)句的方言

(5) show_sql定義是否顯示Hibernate生成的SQL語(yǔ)言,一般在調(diào)試階段設(shè)為true,完成后再改成false,這樣有利于調(diào)試

(6) <mapping >資源文件映射

3.   JNDI方式的Hibernate連接池配置

數(shù)據(jù)源已經(jīng)由應(yīng)用服務(wù)配置好(如Web服務(wù)器),Hibernate需要做的只是通過(guò)JNDI名查找到此數(shù)據(jù)源。應(yīng)用服務(wù)器將連接池對(duì)外顯示為JNDI綁定數(shù)據(jù)源,它是javax.jdbc.Datasource類的一個(gè)實(shí)例。只要配置一個(gè)Hibernate文件,如:hibernate.properties

  1. hibernate.connection.datasource=java:/comp/env/jdbc/schoolproject //JNDI名     
  2. hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory     
  3. hibernate.transaction.manager_loopup_class =     
  4. org.hibernate.transaction.JBossTransactionManagerLookup     
  5. hibernate.dialect=org.hibernate.dialect.MySQLDialect    

結(jié)論:

由于在Hibernate3.0中,已經(jīng)不再支持dbcp了,Hibernate的作者在hibernate.org中,明確指出在實(shí)踐中發(fā)現(xiàn)dbcp有 BUG,在某些種情會(huì)產(chǎn)生很多空連接不能釋放,所以拋棄了對(duì)dbcp的支持。我不知是否在dbcp最新版本中解決了這個(gè)問(wèn)題,我以前在一個(gè)訪問(wèn)量不大的項(xiàng)目中用過(guò)dbcp,運(yùn)行了一年多都沒(méi)出現(xiàn)問(wèn)題。不過(guò)在網(wǎng)上的確也有不少網(wǎng)友指出dbcp在大型的應(yīng)用中會(huì)出現(xiàn)不穩(wěn)定的情況。所以在真相未經(jīng)證實(shí)的情況下,我覺(jué)得對(duì)dbcp持慎重的態(tài)度。

至于c3p0,有評(píng)論說(shuō)它的算法不是最優(yōu)的,而且,我在matrix中,見(jiàn)到有網(wǎng)友做了一個(gè)實(shí)驗(yàn),在同一項(xiàng)目中分別用了幾個(gè)常用的Hibernate連接池配置,然后測(cè)試其性能,發(fā)現(xiàn)c3p0占用資源比較大,效率也不高。

所以,基于上述原因,我才花兩晚的時(shí)間去研究proxool的配置,proxool不少行家推薦使用,而且暫時(shí)來(lái)說(shuō),是負(fù)面評(píng)價(jià)是最少的一個(gè)。在三星中也有項(xiàng)目是用proxool的。

 

【編輯推薦】

  1. Hibernate查詢方法與緩存的關(guān)系
  2. Hibernate緩存機(jī)制探討
  3. Hibernate臟數(shù)據(jù)與數(shù)據(jù)緩存
  4. Hibernate實(shí)體對(duì)象的生命周期
  5. Hibernate數(shù)據(jù)加載方式淺析
責(zé)任編輯:佚名 來(lái)源: JavaeEye
相關(guān)推薦

2009-09-22 16:04:50

Hibernate連接

2009-06-17 09:59:46

Hibernate 連

2009-09-22 14:52:55

Hibernate p

2009-06-24 07:53:47

Hibernate數(shù)據(jù)

2015-04-27 09:50:45

Java Hibern連接池詳解

2009-06-17 09:34:31

Hibernate3Hibernate2連接池

2009-09-22 14:57:34

Hibernate d

2019-12-30 15:30:13

連接池請(qǐng)求PHP

2010-05-17 16:38:08

MySQL 連接池

2011-05-13 09:34:51

TomcatMysql連接池

2009-07-09 17:36:44

JDBC連接池配置

2009-06-16 09:25:31

JBoss配置

2011-06-01 13:54:10

MySQL

2010-11-08 16:46:57

2022-11-11 09:41:04

連接池微服務(wù)數(shù)據(jù)庫(kù)

2018-02-07 16:23:58

連接池內(nèi)存池AI

2009-09-22 17:53:09

Hibernate C

2009-09-22 14:44:18

Hibernate.c

2025-01-10 00:00:10

2024-12-04 15:55:19

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)