各類數(shù)據(jù)源詳細(xì)配置_第1頁
各類數(shù)據(jù)源詳細(xì)配置_第2頁
各類數(shù)據(jù)源詳細(xì)配置_第3頁
各類數(shù)據(jù)源詳細(xì)配置_第4頁
各類數(shù)據(jù)源詳細(xì)配置_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、v!-通過實現(xiàn) ConnectionTester或 QueryConnectionTester的類來測試連接。類三種JDBC連接池技術(shù)詳細(xì)配置日前,Hibernate官方宣布由于 Bug太多不再支持DBCP,而推薦使用Proxool或C3P0。c3p0詳細(xì)配置vdefault-c on figvproperty n ame=acqu ireln creme nt3vproperty n ame=acquireRetryAttempts30vproperty n ame=acquireRetryDelay1000vproperty n ame=autoCommit On Closefalsevp

2、roperty n ame=automaticTestTableTestv/propertyv!-獲取連接失敗將會引起所有等待連接池來獲取連接的線程拋出異常。但是數(shù)據(jù)源仍有效保留,并在下次調(diào)用getConnection()的時候繼續(xù)嘗試獲取連接。如果設(shè)為true,那么在嘗試獲取連接失敗后該數(shù)據(jù)源將申明已斷開并永久關(guān)閉。Default: false-vproperty n ame=breakAfterAcquireFailurefalsev/propertyv!-當(dāng)連接池用完時客戶端調(diào)用getConnection()后等待獲取新連接的時間,超時后將拋出SQLException,如設(shè)為0則無限期等

3、待。單位毫秒。Default: 0 -vproperty n ame=checkoutTimeout100v/propertyv!-當(dāng)用戶調(diào)用getConnection()時使root用戶成為去獲取連接的用戶。主要用于連名需制定全路徑。Default: com.mcha nge.v2.c3pO.impl.DefaultC onnection Tester-vproperty n ame=c onnection TesterClassNamev/propertyvproperty n ame=factoryClassLocati onn ullvproperty n ame=forceIg no

4、reUn resolvedTra nsact ion sfalsevproperty n ame=idleC onn ecti on TestPeriod60v/propertyvproperty n ame=i nitialPoolSize3v/propertyv!-最大空閑時間,60秒內(nèi)未使用則連接被丟棄。若為0則永不丟棄。Default: 0 -vproperty n ame=maxIdleTime60v/propertyv!-連接池中保留的最大連接數(shù)。Default: 15 -vproperty n ame=maxPoolSize15v/propertyv!-JDBC的標(biāo)準(zhǔn)參數(shù),用以控

5、制數(shù)據(jù)源內(nèi)加載的PreparedStateme nts數(shù)量。但由于預(yù)緩存的 statements屬于單個conn ection而不是整個連接池。所以設(shè)置這個參數(shù)需要考慮到多方面的因素。如果 maxStatements與 maxStatementsPerConnection均為 0,則緩存被關(guān)閉。Default: 0-vproperty n ame=maxStateme nts100v/propertyv!-maxStateme ntsPerCo nn ectio n定義了連接池內(nèi)單個連接所擁有的最大緩存statements數(shù)。Default: 0 -vproperty n ame=maxSta

6、teme ntsPerC onnectionv/propertyv!-c3p0是異步操作的,緩慢的 JDBC操作通過幫助進(jìn)程完成。擴(kuò)展這些操作可以有效的提升性能通過多線程實現(xiàn)多個操作同時被執(zhí)行。Default: 3-vproperty n ame=num HelperThreads3v/property接池連接非c3p0的數(shù)據(jù)源時。Default: null-vproperty n ame=overrideDefaultUserrootv/propertyvproperty n ame=overrideDefaultPasswordpasswordvproperty n ame=passwor

7、dv/propertyselectid from test whereid=1v/propertyv!-用戶修改系統(tǒng)配置參數(shù)執(zhí)行前最多等待 300秒。Default: 300 -vproperty n ame=propertyCycle300v/propertyv!-因性能消耗大請只在需要的時候使用它。如果設(shè)為 true那么在每個conn ection 提交的時候都將校驗其有效性。建議使用idleConnectionTestPeriod或automaticTestTable等方法來提升連接測試的性能。Default: false -vproperty n ame=testC onn ecti

8、onOn Checkoutfalsev/propertyv!-如果設(shè)為true那么在取得連接的同時將校驗連接的有效性。 Default: false -vproperty n ame=testC onn ecti onOn Check in truev/propertyv!-用戶名。Default: null-vproperty n ame=userrootv/propertyv!-早期的c3p0版本對JDBC接口采用動態(tài)反射代理。在早期版本用途廣泛的情況下 這個參數(shù)允許用戶恢復(fù)到動態(tài)反射代理以解決不穩(wěn)定的故障。最新的非反射代理更快并且已經(jīng)開始廣泛的被使用,所以這個參數(shù)未必有用。現(xiàn)在原先的動態(tài)

9、反射與新的非反射代理同時受 到支持,但今后可能的版本可能不支持動態(tài)反射代理。Default: false-vproperty n ame=usesTraditi on alReflectiveProxiesfalsev/property vproperty n ame=automaticTestTablec on _testv/property vproperty n ame=checkoutTimeout30000v/property vproperty n ame=idleC onn ecti on TestPeriod30v/property vproperty n ame=i niti

10、alPoolSize10v/property vproperty n ame=maxldleTime30 vproperty n ame=maxPoolSize25 vproperty n ame= min PoolSize10v/property vproperty n ame=maxStateme ntsOv/property vuser-overrides user=swaldma n v/user-overridesv/default-c on fig開發(fā)測試沒有vn amed-c onfig n ame=dumbTestC on figvproperty n ame=maxState

11、me nts200v/property vuser-overrides user=poopvproperty n ame=maxStateme nts300v/property v/user-overridesv/n amed-c on figv/c3p0-c on fig遇到的問題最近的一個項目在 Hibernate 使用C3P0的連接池,數(shù)據(jù)庫為 Mysql 問題,在運(yùn)行中每個一段長的空閑時間就出現(xiàn)異常:java 代碼1.org.hibernate.exception.JDBCConnectionException: could notexecute query2.atorg.hiber

12、nate.excepti on. SQLStateC on verter.c on vert(SQLStateC onve rter.java:74)3.atorg.hiber nate.excepti on. JDBCExcepti onH elper.c on vert(JDBCExceptionH elper.java:43)4.5.Caused by:com.mysql.jdbc.excepti on s.MySQLN onTran sie ntConnection Exceptio n: No operati ons allowed after conn ecti on closed

13、.C onn ecti on wasimplicitly closed due to un derl ying excepti on /error:6. * BEGIN NESTED EXCEPTION *7. com.mysql.jdbc.Com mun icatio nsExceptio n8. MESSAGE: Com mun icatio ns link failure due to un derly ing excepti on:9. * BEGIN NESTED EXCEPTION *10. java .n et.SocketExcepti on11. MESSAGE: Broke

14、 n pipe12.STACKTRACE:13. java .n et.SocketExcepti on: Broke n pipe14. at .SocketOutputStream.socketWriteO(Native Method)15.16.* END NESTED EXCEPTION *查看了 Mysql的文檔,以及Connector/J的文檔以及在線說明發(fā)現(xiàn),出現(xiàn)這種異常的原因是:Mysql服務(wù)器默認(rèn)的“ wait_timeout 是”小時,也就是說一個 conn ection空閑超過8個小時,Mysql將自動斷開該 conn ection 。這就是問題的所在,在C3P0 poo

15、ls中的connections如果空閑超過8小時,Mysql將其斷開,而 C3P0并不知道該conn ection已經(jīng)失效,如果這時有Clie nt 請求 conn ection , C3P0 將該失效的Conn ection 提供給Clie nt,將會造成上面的異常。解決的方法有3種:1. 增加wait_timeout 的時間。2. 減少 Connection pools中 connection的 lifetime 。3. 測試 Co nn ection pools中 conn ection的有效性。當(dāng)然最好的辦法是同時綜合使用上述3種方法,下面就DBCP和C3P0分別做一說明,假設(shè)wait

16、_timeout為默認(rèn)的8小時DBCP增加以下配置信息:10.testCo nn ectio nOn Checkout =true1./set to SELECT 12.validatio nQuery =SELECT 13./set to true4.testWhileldle = true5./some positive in teger6.timeBetwee nEvictio nRun sMillis = 36000007./set to somethi ng smaller tha n wait_timeout8.mi nEvictableldleTimeMillis = 18000

17、0009./if you dont mind a hit for every getC onnection(), set to true10. testOn Borrow =trueC3P0增加以下配置信息1./獲取connnection時測試是否有效2.testC onn ectio nOn Checki n = true3./自動測試的table名稱4.automaticTestTable=C3P0TestTable5./set to somethi ng much less tha n wait_timeout, preve ntsconn ecti ons from going sta

18、le6.idleCo nn ectio nTestPeriod = 180007./set to somethi ng slightly less tha n wait_timeout, preve nti ng stale conn ecti ons from being han ded out8.maxIdleTime = 250009./if you can take the performance hit, set to trueProxoolProxool在Hibernate中的典型配置如下:配置步聚 建立proxool.xml 文件,路徑為根目錄 src下即與hibernate.c

19、fg.xml 同目錄,內(nèi)容如下:mssqlProxooljdbc:sqlserver:/XXX.XXX.XXX.XX:1433;databaseName=XXXcom.microsoft.sqlserver.jdbc.SQLServerDrivervhouse-keepi ng-test-sqlselectCURRENT_DATE9000020vmaximum-c onnection-co un t10010vmaximum-c onn ecti on-lifetime3600000v/somethi ng-else-e ntirely屬性列表說明:fatal-sql-exception:它是

20、一個逗號分割的信息片段.當(dāng)一個SQL異常發(fā)生時,他的異常信息將與這個信息片段進(jìn)行比較.如果在片段中存在,那么這個異常將被認(rèn)為是個致命錯誤(Fatal SQL Exception ).這種情況下,數(shù)據(jù)庫連接將要被放棄.無論發(fā)生什么,這個異常將會被重擲以提供給消費(fèi)者 用戶最好自己配置一個不同的異常來拋出fatal-sql-exception-wrapper-class:正如上面所說,你最好配置一個不同的異常來重擲.利用這個屬性,用戶可以包裝SQLException,使他變成另外一個異常.這個異常或者繼承SQLException 或者繼承字 RuntimeExool自帶了 2

21、 個實現(xiàn):xool.FataISQLException和 xool.FatalRuntimeException.后者更合適.house-keep in g-sleep-time: house keeper保留線程處于睡眠狀態(tài)的最長時間,house keeper 的職責(zé)就是檢查各個連接的狀態(tài),并判斷是否需要銷毀或者創(chuàng)建 .house-keep in g-test-sql:如果發(fā)現(xiàn)了空閑的數(shù)據(jù)庫連接.housekeeper將會用這個語句來測試.這個語句最好非常快的被執(zhí)行.如果沒有定義,測試過程將會被忽略。inj

22、ectable-connection-interface:允許 proxool 實現(xiàn)被代理的connection 對象的方法 .injectable-statement-interface:允許 proxool 實現(xiàn)被代理的Statement 對象方法.injectable-prepared-statement-interface:允許 proxool 實現(xiàn)被代理的PreparedStatement 對象方法.允許proxool實現(xiàn)被代Bean到j(luò)ms服務(wù),消息Bean 默認(rèn)值為false.in jectable-callable-stateme nt-i nteface: 理的Callabl

23、eStatement對象方法.jmx:如果屬性為true,就會注冊一個消息 對象名:Proxool:type=Pool, name=.jmx-age nt-id:一個逗號分隔的 JMX代理列表(如使用MBea nServerFactory.fi ndMBea nServer(Stri ng age ntld)注冊的連接池。)這個屬性是僅當(dāng)jmx屬性設(shè)置為true才有效。所有注冊jmx服務(wù)器使用 這個屬性是不確定的jn di-name:數(shù)據(jù)源的名稱maximum-active-time:如果housekeeper 檢測到某個線程的活動時間大于這個數(shù)值.它將會殺掉這個線程.所以確認(rèn)一下你的服務(wù)器的

24、帶寬.然后定一個合適的值.默認(rèn)是5分鐘.maximu m-conn ectio n-co unt:最大的數(shù)據(jù)庫連接數(shù).maximu m-conn ectio n-lifetime:個線程的最大壽命.minimu m-c onn ecti on-count:最小的數(shù)據(jù)庫連接數(shù)overload-without-refusal-lifetime:這可以幫助我們確定連接池的狀態(tài)。如果我們已經(jīng)拒絕了一個連接在這個設(shè)定值(毫秒),然后被認(rèn)為是超載。默認(rèn)為60秒。prototype-count:連接池中可用的連接數(shù)量.如果當(dāng)前的連接池中的連接少于這個數(shù)值.新的連接將被建立(假設(shè)沒有超過最大可用數(shù) ).例如.

25、我們有3個活動連接2個可用連接而我們的prototype-count 是4,那么數(shù)據(jù)庫連接池將試圖建立另外2個連接.這和minimum-connection-count不同.minimum-connection-count把活動的連接也計算在內(nèi).prototype-count是spare connections的數(shù)量.recen tly-started-threshold:這可以幫助我們確定連接池的狀態(tài),連接數(shù)少還是多或超載。只要至少有一個連接已開始在此值(毫秒)內(nèi),或者有一些多余的可用連接,那么我們假設(shè)連接池是開啟的。默認(rèn)為 60秒simulta neous-build-throttle:這

26、是我們可一次建立的最大連接數(shù)。那就是新增的連接請求,但還沒有可供使用的連接。由于連接可以使用多線 程,在有限的時間之間建立聯(lián)系從而帶來可用連接,但是我們需要通過一些 方式確認(rèn)一些線程并不是立即響應(yīng)連接請求的,默認(rèn)是10。statistics:連接池使用狀況統(tǒng)計。參數(shù)“ 10s,1m,1d ”statistics-log-level:日志統(tǒng)計跟蹤類型。參數(shù)“ ERROR或“ INFOtest-before-use:如果為true ,在每個連接被測試前都會服務(wù)這個連接,如果一個連接失敗,那么將被丟棄,另一個連接將會被處理,如果所 有連接都失敗,一個新的連接將會被建立。否則將會拋出一個SQLExce

27、ption異常。test-after-use:如果為true,在每個連接被測試后都會服務(wù)這個連接,使其回到連接池中,如果連接失敗,那么將被廢棄。trace:如果為true,那么每個被執(zhí)行的SQL語句將會在執(zhí)行期被log記錄(DEBUG LEVEL).你也可以注冊一個ConnectionListener (參看ProxoolFacade)得到這些信息.(2)修改hibernate.cfg.xml文件,內(nèi)容如下:mssqlProxoolproxool.xmlorg.hibernate.co nnection .ProxoolC onn ecti on Providertrueorg.hiber n

28、ate.dialect.SQLServerDialectvpropertyn ame=hiber nate.cache.use_query_cachetruev/sessi on-factory這里需注意三點:1. 別名與proxool中的別名保持一致.2. 路徑確保正確3. 一般網(wǎng)上只說明了以上兩點,xool.existing_pool這個參數(shù)很重要xool.existing_pool:此值設(shè)為 false ,當(dāng)hibernate開始被調(diào)用時,就會初始化proxool ,進(jìn)行數(shù)據(jù)庫連接等操作;要讓程序直接使用proxool連接池,可以在 w

29、eb.xml中配置初始化servlet,在web容器加載的時候自動加載配置文件ServletC on figurator org .lo xool.co nfigurati on .ServletCon figuratorvparam-n amexmlFile/WEB-INF/classes/proxool.xmlvload-on-startup1/load-on-startup注意:如果同時配置了 web.xml和hibernate.cfg.xml會產(chǎn)生錯誤:xool.ProxoolException: Parsin

30、g failed.因為同名的proxool連接池已經(jīng)啟動,而hibernate 開始運(yùn)行時會自己啟動關(guān)聯(lián)的proxool連接池.所以此時應(yīng)改變hibernate.cfg.xml 配置為:vpropertyn ame=hiber xool.exist in g_pooltrue(4)這一步是可選的在應(yīng)用中實時監(jiān)控連接池adm in Proxoolv/servlet -n ameorg .lo xool.admi n.servlet.Admi nSer vletadm in Proxool/admi n/proxoolv/servlet-mapp ing訪問http:/localhost:8080/項目名稱/admin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論