![BSS-QC-數(shù)據(jù)庫(kù)連接和事務(wù)管理專題_第1頁(yè)](http://file4.renrendoc.com/view/c49185878eb987115647e7bc315bf33c/c49185878eb987115647e7bc315bf33c1.gif)
![BSS-QC-數(shù)據(jù)庫(kù)連接和事務(wù)管理專題_第2頁(yè)](http://file4.renrendoc.com/view/c49185878eb987115647e7bc315bf33c/c49185878eb987115647e7bc315bf33c2.gif)
![BSS-QC-數(shù)據(jù)庫(kù)連接和事務(wù)管理專題_第3頁(yè)](http://file4.renrendoc.com/view/c49185878eb987115647e7bc315bf33c/c49185878eb987115647e7bc315bf33c3.gif)
![BSS-QC-數(shù)據(jù)庫(kù)連接和事務(wù)管理專題_第4頁(yè)](http://file4.renrendoc.com/view/c49185878eb987115647e7bc315bf33c/c49185878eb987115647e7bc315bf33c4.gif)
![BSS-QC-數(shù)據(jù)庫(kù)連接和事務(wù)管理專題_第5頁(yè)](http://file4.renrendoc.com/view/c49185878eb987115647e7bc315bf33c/c49185878eb987115647e7bc315bf33c5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、BSS系統(tǒng)中數(shù)據(jù)庫(kù)連接的安全使用和事務(wù)問(wèn)題匯總V1.0.1修改日期原因修改人2007-099-30根據(jù)zhaoxxin的意見見,修改了HHibernnate的ssessioon連接管理理劉世偉2007-111-8根據(jù)調(diào)優(yōu)組當(dāng)前前的工作,補(bǔ)補(bǔ)充了一些內(nèi)內(nèi)容劉世偉幾個(gè)名詞解釋:數(shù)據(jù)庫(kù)連接池:眾所周知,建建立數(shù)據(jù)庫(kù)連接是是一個(gè)昂貴的的操作,每次次都得花費(fèi)約約0.05ss1s的時(shí)時(shí)間,消耗一定的內(nèi)存資源(OOraclee 9i的一一個(gè)空閑連接接約需255MB內(nèi)存,非非空閑連接約約需幾十MB左右右內(nèi)存),而且一旦旦到達(dá)臨界點(diǎn)點(diǎn),系統(tǒng)會(huì)陷陷入資源管理理的惡性循環(huán)環(huán):越來(lái)越慢。數(shù)據(jù)庫(kù)連接接池的基本思思想就是
2、為數(shù)數(shù)據(jù)庫(kù)連接建建立一個(gè)“緩緩沖池”。預(yù)預(yù)先在緩沖池池中放入一定定數(shù)量的連接接備用,減少使使用時(shí)才創(chuàng)建、銷毀的消耗。當(dāng)需要建立立數(shù)據(jù)庫(kù)連接接時(shí),只需從從“緩沖池”中中取出一個(gè),使使用完畢之后后再放回去。使使用連接池后后,數(shù)據(jù)庫(kù)服服務(wù)器減少了了它并不擅長(zhǎng)長(zhǎng)的連接管理理工作,通過(guò)過(guò)池連接的快速?gòu)?fù)用,可可以為客戶端端提供更大的的并發(fā)量,內(nèi)內(nèi)存消耗也在在可控范圍內(nèi)內(nèi)波動(dòng)。我們們可以通過(guò)設(shè)設(shè)定連接池最最大連接數(shù)來(lái)來(lái)防止系統(tǒng)無(wú)無(wú)盡的與數(shù)據(jù)據(jù)庫(kù)連接,控控制數(shù)據(jù)庫(kù)的的壓力。我們也可以通過(guò)連連接池的管理理機(jī)制監(jiān)控?cái)?shù)據(jù)庫(kù)連接的的數(shù)量使用用情況,為系系統(tǒng)開發(fā)測(cè)測(cè)試及性能調(diào)調(diào)優(yōu)提供依據(jù)據(jù)。真實(shí)連接:客戶戶端程序直接和
3、數(shù)據(jù)庫(kù)建立立的Connnectioon,使用完畢需需要及時(shí)、安全的關(guān)閉閉,否則會(huì)導(dǎo)導(dǎo)致數(shù)據(jù)庫(kù)內(nèi)內(nèi)存資源泄漏漏、服務(wù)器宕機(jī)代理連接:客戶戶端程序從連接池池獲取的Coonnecttion,它實(shí)際上是封裝了真實(shí)實(shí)連接,提供供和真實(shí)連接接相同的功能能,使用完畢畢也需要及時(shí)、安全的關(guān)閉閉,否則連接接池中的連接接得不到釋放放,會(huì)導(dǎo)致連連接池中可用用的空閑連接接越來(lái)越少。當(dāng)然,由于于存在連接池池的控制,數(shù)數(shù)據(jù)庫(kù)不會(huì)因因此而宕機(jī)。一、BSS數(shù)據(jù)據(jù)庫(kù)連接管理理現(xiàn)狀:BSS系統(tǒng)中對(duì)對(duì)數(shù)據(jù)庫(kù)連接的的管理,是統(tǒng)統(tǒng)一通過(guò)數(shù)據(jù)據(jù)源(DattaSourrce)管理理的,存在連接池和和單連接兩種種方式的數(shù)據(jù)源源(詳情參考考m
4、odellxxx.jjar中的xxxxDattabasee.xml文文件)連接池?cái)?shù)據(jù)源,命名方式為為“xxxDaataSouurce”,BSS采用了apachhe的開源池池mmons.ddbcp.BBasicDDataSoource,應(yīng)用程序獲取取的是apaache連接接池的代理連接(cconnecctionPProxy),非真實(shí)連接。單連接數(shù)據(jù)源,命名方式為為“xxxDaataSouurceNooPool”,BSS采用用了Spriing框架的的org.sspringgframeework.jdbc.datassourcee.DrivverMannagerDDataSoource,程程序獲取的
5、是是真實(shí)的數(shù)據(jù)據(jù)庫(kù)連接。二、BSS系統(tǒng)統(tǒng)中對(duì)數(shù)據(jù)源源的使用Hibernaate的SeessionnFactoory,使用的是連連接池?cái)?shù)據(jù)源源,在配置文文件中一般命命名為“xxxSesssionFFactorry”,而且Hibeernatee本身包含一一個(gè)簡(jiǎn)單的連連接池hibbernatte.connnectiion,但性能和功能不如aapachee的。Spring的的JdbcTTemplaate,根據(jù)其使用用數(shù)據(jù)源是否否為連接池,命命名方式也不不同,配置文文件中對(duì)使用用連接池?cái)?shù)據(jù)據(jù)源的命名為為“xxxJDDBC”,使用單連連接數(shù)據(jù)源的的命名為“xxxJDDBCNoPPool”三、應(yīng)用程序中中對(duì)
6、連接的使使用BSS程序中使使用Hibeernatee的sesssion和JJdbcTeemplatte提供的通通用方法一般般是夠用的,但但某些場(chǎng)景下下如執(zhí)行orracle特特性的SQLL語(yǔ)句或存儲(chǔ)儲(chǔ)過(guò)程,需要要獲取真實(shí)數(shù)據(jù)庫(kù)連連接,現(xiàn)在主主要使用以下下幾種方式:Hibernaate中,通通過(guò)getSSessioon().cconnecction(),此時(shí)獲取的是是連接是根據(jù)據(jù)其數(shù)據(jù)源決決定的,如果果通過(guò)連接池池中獲取,則則是代理連接接,否則是真真實(shí)數(shù)據(jù)庫(kù)連連接,但注意,無(wú)論如如何都不能用connn.cloose()語(yǔ)語(yǔ)句顯示關(guān)閉閉的;這時(shí)候的cconn其實(shí)實(shí)是被sesssion管管理了,Hii
7、bernaate會(huì)在SSessioon的事務(wù)提提交或回滾的的時(shí)候,自動(dòng)動(dòng)把連接放回池池中,如果我我們主動(dòng)關(guān)了了,會(huì)拋異常常。JdbcTemmplatee中,通過(guò)jjdbc.ggetDattaSourrce().getCoonnecttion(),此時(shí)獲取的連接是是根據(jù)其數(shù)據(jù)據(jù)源決定的,如如果jdbcc.getDDataSoource()返回的是是連接池?cái)?shù)據(jù)據(jù)源,則連接接是連接池的的連接代理(重重載了真實(shí)連連接的cloose方法),需要從代理連接中再次獲取真實(shí)連接,見下面的a段落;如果返回的是單連接的數(shù)據(jù)源,則返回的是真實(shí)連接。這2種連接都需要顯式的close關(guān)閉,前者表示把連接還回連接池繼續(xù)使
8、用,后者表示真正關(guān)閉連接,釋放數(shù)據(jù)庫(kù)內(nèi)存。對(duì)JdbcTeemplatte中返回代代理連接的情情況,由于是是連接代理,對(duì)Oracle的Blob和Clob大數(shù)據(jù)對(duì)象,在CLOB.createTemporary(conn, true, CLOB.DURATION_SESSION)的時(shí)候,會(huì)拋ClassCastException,此時(shí)需要獲取真實(shí)的物理連接,方法如下:設(shè)置DataSSourcee中連接池的的accesssToUnnderlyyingCoonnecttionAlllowedd屬性的值為ttrue,表表示允許從連接代代理中獲取物物理連接;對(duì)apachee的BasiicDataaSourcc
9、e,可通過(guò)mmons.dbcp.DeleggatinggConneectionn的getDeelegatte()方法法獲取真實(shí)連連接。注意,通過(guò)連接接池代理連接接而獲取的真真實(shí)連接一定定不能直接關(guān)關(guān)閉,否則連連接池就沒(méi)有有意義了,最好把這種種情況下的獲獲取物理連接接創(chuàng)建Cllob用方法法屏蔽掉,防止止被誤關(guān)閉。代碼掃描后發(fā)現(xiàn)現(xiàn)系統(tǒng)中普遍遍存在的問(wèn)題題:1、對(duì)打開的數(shù)數(shù)據(jù)庫(kù)資源cconn、pps、rs,主主動(dòng)寫了cllose語(yǔ)句句,但是沒(méi)有有寫在finnally語(yǔ)語(yǔ)句塊里面,一一旦發(fā)生異常常,那么cllose語(yǔ)句句就會(huì)被旁路路,導(dǎo)致資源源得不到釋放放。2、沒(méi)有主動(dòng)寫寫closee語(yǔ)句,當(dāng)然然這個(gè)
10、是存在在一些爭(zhēng)議的的,請(qǐng)看以下下解釋: a、如如果不使用連連接池機(jī)制,關(guān)閉coonnecttion,會(huì)自動(dòng)關(guān)閉閉resulltset和和stateement的的,程序中可可以不顯示關(guān)關(guān)閉; b、如如果使用連接接池,所謂謂的關(guān)閉coonnecttion,其實(shí)是將連連接返回給了了連接池,連連接對(duì)象依然然存在,實(shí)實(shí)際上不是物物理關(guān)閉,因因此,必須顯顯示的關(guān)閉rresulttset和sstatemment,否否則連接池中中連接上的rrs和ps會(huì)會(huì)越來(lái)越多。3、單獨(dú)寫了cclose的的語(yǔ)句塊,到到?jīng)]什么問(wèn)題題,看著不舒舒服罷了。附件是代碼中問(wèn)問(wèn)題的位置,請(qǐng)請(qǐng)?jiān)斂?。建議:我們系統(tǒng)有使用用連接池和單單獨(dú)創(chuàng)建
11、連接接的,所以保保險(xiǎn)起見,rresulttset和sstatmeent(PrrepareedStattementt、CalllableSStatemment)一一定在finnally語(yǔ)語(yǔ)句里面主動(dòng)動(dòng)保持先后次次序closse掉,在此此貼一下示例例程序。Connecttion ccon = null;PrepaaredSttatemeent pss = nuull;ReesultSSet rss = nuull;try .catch (SSQLExcceptioon ex).finallyy tryy if(rss!=nulll) rrs.cloose(); ccatch (SQLEExcept
12、tion eex) /錯(cuò)誤處理 trry if(pps!=nuull) ps.cllose(); catchh (SQLLExcepption ex) /錯(cuò)誤處理理 ttry if(ccon!=nnull)/注意:Hiberrnate中中得到的coonn不能關(guān)關(guān)閉。 conn.closse(); caatch (SQLExxceptiion exx) /錯(cuò)錯(cuò)誤處理 數(shù)據(jù)庫(kù)事務(wù)管理理現(xiàn)狀:BSS中采用了了Sprinng的聲明式式事務(wù)管理,在配置文件中通過(guò)對(duì)象或方法的名稱通配事務(wù)的加載與否。由于存在以上的的數(shù)據(jù)庫(kù)連接接管理方式,所所以對(duì)數(shù)據(jù)庫(kù)庫(kù)的事務(wù)管理理也是存在多多種方式:Hibernaate的
13、seessionnJdbcTemmplatee通過(guò)sessiion或jddbcTemmplatee獲取的Connnectiion,一般般直接執(zhí)行ssql語(yǔ)句和和存儲(chǔ)過(guò)程存在的問(wèn)題:1、事務(wù)回滾規(guī)規(guī)則只有DAAOExceeptionn(部分),缺缺BssExxceptiion 現(xiàn)在BMOO中規(guī)范拋出出BssExxceptiion,一旦旦BMO方法法中出現(xiàn)異常常,現(xiàn)在的配配置是事務(wù)不不回滾的,導(dǎo)導(dǎo)致前后數(shù)據(jù)據(jù)不完整。 建議,sspringg事務(wù)配置里里面加入強(qiáng)制制回滾模式匹匹配: -bbss.coommon.BssExxceptiion,如下下: PROPPAGATIION_REEQUIREED,
14、-mmon.DDAOExcceptioon,-mmon.BBssExcceptioon EJJB事務(wù)回滾滾規(guī)則: 1、如如果beann拋出RunntimeEExcepttion,容容器會(huì)自動(dòng)回回滾事務(wù),并并且在外面包包裝一個(gè)ReemoteEExcepttion拋出出。 2、如果bbean拋出出其他的異常常,容器不會(huì)會(huì)做任何處理理,除非強(qiáng)制制定義。2、事務(wù)攔截截粒度比較粗粗,定義在類類級(jí)別而不是是方法級(jí)別 事務(wù)攔攔截器的配置置在beann的名稱上,該該bean下下所有的方法法都按照同一一種事務(wù)模式式 象rreadonnly的事務(wù)務(wù)隔離模式,對(duì)對(duì)只查詢不修修改的方法,性性能提高比較較大,但需要要更
15、改攔截器器,定義在方方法級(jí)別。 此條只涉涉及性能,影影響不是很大大,可酌情。3、EJB和spring的事務(wù)傳遞問(wèn)題 如果BMO中spring不加載事務(wù),被EJB包裝后,發(fā)現(xiàn)EJB的事務(wù)不能傳遞給spring,EJB事務(wù)回滾了,但是spring管理bean的事務(wù)仍舊提交了,原因待詳查,初步分析是ejb容器和spring容器事務(wù)不能透?jìng)鳎凑誆JB規(guī)范,CMT(容器管理的事務(wù))內(nèi)部是不能有嵌套事務(wù)的。當(dāng)前為規(guī)避此種情況,建議所有的BMO,如果需要事務(wù)的,名稱一律按照規(guī)范以“Manager”“DAO”結(jié)尾。調(diào)優(yōu)組正在組織力量集中解決這個(gè)問(wèn)題,初步思路是啟用EJB BMT(Bean 管理事務(wù)),使用w
16、ebsphere的事務(wù)管理和連接池存儲(chǔ)過(guò)程和Jaava事務(wù)的的嵌套問(wèn)題:在一個(gè)bmo中中同時(shí)調(diào)用幾幾個(gè)dao,dao中分別別用hibeernatee、jdbc和存存儲(chǔ)過(guò)程完成成inserrt或updatte操作,事務(wù)是是可以完整的的,不過(guò)需要要注意2點(diǎn):一是存儲(chǔ)過(guò)程里里面不能有ccommitt和rollbback二是dao調(diào)用用存儲(chǔ)過(guò)程后后,dao中也不不要寫commmit和rollbback,只只要closse就可以,由事事務(wù)控制自動(dòng)動(dòng)提交,除非非捕捉到bsssexceeptionn,這里要在在sprinng的事務(wù)攔攔截中配一下下bssexxceptiion、daaoExceeptionn,這樣就可可以控制異常常的回滾。遺留問(wèn)題:采用連接池后,如如果數(shù)據(jù)庫(kù)存存儲(chǔ)過(guò)程
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年群路密碼機(jī)系列合作協(xié)議書
- 人教版一年級(jí)語(yǔ)文下冊(cè)《吃水不忘挖井人》教學(xué)設(shè)計(jì)
- 2025年速凍丸類制品合作協(xié)議書
- 2025年個(gè)體診所合作協(xié)議(三篇)
- 2025年買賣別墅合同模板(三篇)
- 2025年產(chǎn)品區(qū)域代理合同協(xié)議常用版(2篇)
- 2025年產(chǎn)品設(shè)計(jì)合同(三篇)
- 2025年二年級(jí)教研組工作總結(jié)(2篇)
- 2025年個(gè)人幼兒園的課題總結(jié)范文(二篇)
- 2025年個(gè)人房屋防水施工合同模板(2篇)
- 城市隧道工程施工質(zhì)量驗(yàn)收規(guī)范
- 2025年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招高職單招英語(yǔ)2016-2024年參考題庫(kù)含答案解析
- 五 100以內(nèi)的筆算加、減法2.筆算減法 第1課時(shí) 筆算減法課件2024-2025人教版一年級(jí)數(shù)學(xué)下冊(cè)
- 2025江蘇太倉(cāng)水務(wù)集團(tuán)招聘18人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024-2025學(xué)年人教新版高二(上)英語(yǔ)寒假作業(yè)(五)
- 2025年八省聯(lián)考陜西高考生物試卷真題答案詳解(精校打印)
- 石油化工、煤化工、天然氣化工優(yōu)劣勢(shì)分析
- Q∕GDW 12118.3-2021 人工智能平臺(tái)架構(gòu)及技術(shù)要求 第3部分:樣本庫(kù)格式
- 客戶的分級(jí)管理培訓(xùn)(共60頁(yè)).ppt
- 廣東省義務(wù)教育階段學(xué)生轉(zhuǎn)學(xué)轉(zhuǎn)出申請(qǐng)表(樣本)
- 如何成為一個(gè)優(yōu)秀的生產(chǎn)經(jīng)理
評(píng)論
0/150
提交評(píng)論