Spring連接池配置詳解_第1頁(yè)
Spring連接池配置詳解_第2頁(yè)
Spring連接池配置詳解_第3頁(yè)
Spring連接池配置詳解_第4頁(yè)
Spring連接池配置詳解_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)庫(kù)連接池概述:數(shù)據(jù)庫(kù)連接是一種關(guān)鍵的有限的昂貴的資源,這一點(diǎn)在多用戶的網(wǎng)頁(yè)應(yīng)用程序中體現(xiàn)得尤為突出。對(duì)數(shù)據(jù)庫(kù)連接的管理能顯著影響到整個(gè)應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo)。數(shù)據(jù)庫(kù)連接池正是針對(duì)這個(gè)問題提出來的。數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而再不是重新建立一個(gè);釋放空閑時(shí)間超過最大空閑時(shí)間的數(shù)據(jù)庫(kù)連接來避免因?yàn)闆]有釋放數(shù)據(jù)庫(kù)連接而引起的數(shù)據(jù)庫(kù)連接遺漏。這項(xiàng)技術(shù)能明顯提高對(duì)數(shù)據(jù)庫(kù)操作的性能。數(shù)據(jù)庫(kù)連接池在初始化時(shí)將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫(kù)連接放到連接池中,這些數(shù)據(jù)庫(kù)連接的數(shù)量是由最小數(shù)據(jù)庫(kù)連接數(shù)來設(shè)定的。無(wú)論這些數(shù)據(jù)庫(kù)連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。連接池的最大數(shù)據(jù)庫(kù)連接數(shù)量限定了這個(gè)連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請(qǐng)求的連接數(shù)超過最大連接數(shù)量時(shí),這些請(qǐng)求將被加入到等待隊(duì)列中。數(shù)據(jù)庫(kù)連接池的最小連接數(shù)和最大連接數(shù)的設(shè)置要考慮到下列幾個(gè)因素:1) 最小連接數(shù)是連接池一直保持的數(shù)據(jù)庫(kù)連接,所以如果應(yīng)用程序?qū)?shù)據(jù)庫(kù)連接的使用量不大,將會(huì)有大量的數(shù)據(jù)庫(kù)連接資源被浪費(fèi);2) 最大連接數(shù)是連接池能申請(qǐng)的最大連接數(shù),如果數(shù)據(jù)庫(kù)連接請(qǐng)求超過此數(shù),后面的數(shù)據(jù)庫(kù)連接請(qǐng)求將被加入到等待隊(duì)列中,這會(huì)影響之后的數(shù)據(jù)庫(kù)操作。3) 如果最小連接數(shù)與最大連接數(shù)相差太大,那么最先的連接請(qǐng)求將會(huì)獲利,之后超過最小連接數(shù)量的連接請(qǐng)求等價(jià)于建立一個(gè)新的數(shù)據(jù)庫(kù)連接。不過,這些大于最小連接數(shù)的數(shù)據(jù)庫(kù)連接在使用完不會(huì)馬上被釋放,它將被放到連接池中等待重復(fù)使用或是空閑超時(shí)后被釋放。目前常用的連接池有:C3P0、DBCP、Proxool網(wǎng)上的評(píng)價(jià)是:C3P0比較耗費(fèi)資源,效率方面可能要低一點(diǎn)。DBCP在實(shí)踐中存在BUG,在某些種情會(huì)產(chǎn)生很多空連接不能釋放,Hibernate3.0已經(jīng)放棄了對(duì)其的支持。Proxool的負(fù)面評(píng)價(jià)較少,現(xiàn)在比較推薦它,而且它還提供即時(shí)監(jiān)控連接池狀態(tài)的功能,便于發(fā)現(xiàn)連接泄漏的情況。配置如下:1、在spring配置文件中,一般在applicationContext.xml中<beanid="DataSource"class="xool.ProxoolDataSource”destroy-method="shutdown"><propertyname="driver"><value>oracle.jdbc.driver.OracleDriver</value></property><propertyname="driverUrl"><value>jdbc:oracle:thin:xxxx/xxxx@192.168.0.XX:1521:server</value></property><propertyname="user"><value>xxxx</value></property><propertyname="password"><value>xxxx</value></property><propertyname="alias"><value>server</value></property><propertyname="houseKeepingSleepTime"><value>30000</value></property><propertyname="houseKeepingTestSql"><value>select1fromdual</value></property><propertyname="testBeforeUse"><value>true</value></property><propertyname="testAfterUse"><value>true</value></property><propertyname="prototypeCount"><value>5</value></property><propertyname="maximumConnectionCount"><value>400</value></property><propertyname="minimumConnectionCount"><value>10</value></property><propertyname="statistics"><value>1m,15m,1d</value></property><propertyname="statisticsLogLevel"><value>ERROR</value></property><propertyname="trace"><value>true</value></property><propertyname="verbose"><value>false</value></property><propertyname="simultaneousBuildThrottle"><value>1600</value></property><propertyname="maximumActiveTime"><value>600000</value></property><propertyname="jmx"><value>false</value></property></bean>然后注入到sessionFactory中<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="dataSource"ref="DataSource"/></bean>屬性列表說明:fatal-sql-exception:它是一個(gè)逗號(hào)分割的信息片段。當(dāng)一個(gè)SQL異常發(fā)生時(shí),他的異常信息將與這個(gè)信息片段進(jìn)行比較。如果在片段中存在,那么這個(gè)異常將被認(rèn)為是個(gè)致命錯(cuò)誤(FatalSQLException)。這種情況下,數(shù)據(jù)庫(kù)連接將要被放棄。無(wú)論發(fā)生什么,這個(gè)異常將會(huì)被重?cái)S以提供給消費(fèi)者。用戶最好自己配置一個(gè)不同的異常來拋出。fatal-sql-exception-wrapper-class:正如上面所說,你最好配置一個(gè)不同的異常來重?cái)S。利用這個(gè)屬性,用戶可以包裝SQLException,使他變成另外一個(gè)異常。這個(gè)異?;蛘呃^承QLException或者繼承字RuntimeExool自帶了2個(gè)實(shí)現(xiàn):'xool.FatalSQLException'和'xool.FatalRuntimeException'。后者更合適。house-keeping-sleep-time:housekeeper保留線程處于睡眠狀態(tài)的最長(zhǎng)時(shí)間,housekeeper的職責(zé)就是檢查各個(gè)連接的狀態(tài),并判斷是否需要銷毀或者創(chuàng)建。house-keeping-test-sql:如果發(fā)現(xiàn)了空閑的數(shù)據(jù)庫(kù)連接.housekeeper將會(huì)用這個(gè)語(yǔ)句來測(cè)試.這個(gè)語(yǔ)句最好非常快的被執(zhí)行.如果沒有定義,測(cè)試過程將會(huì)被忽略。injectable-connection-interface:允許proxool實(shí)現(xiàn)被代理的connection對(duì)象的方法。injectable-statement-interface:允許proxool實(shí)現(xiàn)被代理的Statement對(duì)象方法。injectable-prepared-statement-interface:允許proxool實(shí)現(xiàn)被代理的PreparedStatement對(duì)象方法。injectable-callable-statement-interface:允許proxool實(shí)現(xiàn)被代理的CallableStatement對(duì)象方法。jmx:如果屬性為true,就會(huì)注冊(cè)一個(gè)消息Bean到j(luò)ms服務(wù),消息Bean對(duì)象名:“Proxool:type=Pool,name=<alias>”。默認(rèn)值為false。jmx-agent-id:一個(gè)逗號(hào)分隔的JMX代理列表(如使用MBeanServerFactory.findMBeanServer(StringagentId)注冊(cè)的連接池。)這個(gè)屬性是僅當(dāng)“jmx”屬性設(shè)置為“true”才有效。所有注冊(cè)jmx服務(wù)器使用這個(gè)屬性是不確定的jndi-name:數(shù)據(jù)源的名稱maximum-active-time:如果housekeeper檢測(cè)到某個(gè)線程的活動(dòng)時(shí)間大于這個(gè)數(shù)值。它將會(huì)殺掉這個(gè)線程。所以確認(rèn)一下你的服務(wù)器的帶寬。然后定一個(gè)合適的值。默認(rèn)是5分鐘。maximum-connection-count:最大的數(shù)據(jù)庫(kù)連接數(shù)。maximum-connection-lifetime:一個(gè)線程的最大壽命。minimum-connection-count:最小的數(shù)據(jù)庫(kù)連接數(shù)overload-without-refusal-lifetime:這可以幫助我們確定連接池的狀態(tài)。如果我們已經(jīng)拒絕了一個(gè)連接在這個(gè)設(shè)定值(毫秒),然后被認(rèn)為是超載。默認(rèn)為60秒。prototype-count:連接池中可用的連接數(shù)量。如果當(dāng)前的連接池中的連接少于這個(gè)數(shù)值。新的連接將被建立(假設(shè)沒有超過最大可用數(shù))。例如,我們有3個(gè)活動(dòng)連接2個(gè)可用連接,而我們的prototype-count是4,那么數(shù)據(jù)庫(kù)連接池將試圖建立另外2個(gè)連接。這和minimum-connection-count不同。minimum-connection-count把活動(dòng)的連接也計(jì)算在內(nèi)。prototype-count是spareconnections的數(shù)量。recently-started-threshold:這可以幫助我們確定連接池的狀態(tài),連接數(shù)少還是多或超載。只要至少有一個(gè)連接已開始在此值(毫秒)內(nèi),或者有一些多余的可用連接,那么我們假設(shè)連接池是開啟的。默認(rèn)為60秒simultaneous-build-throttle:這是我們可一次建立的最大連接數(shù)。那就是新增的連接請(qǐng)求,但還沒有可供使用的連接。由于連接可以使用多線程,在有限的時(shí)間之間建立聯(lián)系從而帶來可用連接,但是我們需要通過一些方式確認(rèn)一些線程并不是立即響應(yīng)連接請(qǐng)求的,默認(rèn)是10。statistics:連接池使用狀況統(tǒng)計(jì)。參數(shù)“10s,1m,1d"statistics-log-level:日志統(tǒng)計(jì)跟蹤類型。參數(shù)“ERROR”或“INFO”test-before-use:如果為true,在每個(gè)連接被測(cè)試前都會(huì)服務(wù)這個(gè)連接,如果一個(gè)連接失敗,那么將被丟棄,另一個(gè)連接將會(huì)被處理,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論