![BSS-QC-數(shù)據(jù)庫(kù)連接和事務(wù)管理專(zhuān)題_第1頁(yè)](http://file4.renrendoc.com/view/2da5f9a9d9af35487a8f4af11e2561d1/2da5f9a9d9af35487a8f4af11e2561d11.gif)
![BSS-QC-數(shù)據(jù)庫(kù)連接和事務(wù)管理專(zhuān)題_第2頁(yè)](http://file4.renrendoc.com/view/2da5f9a9d9af35487a8f4af11e2561d1/2da5f9a9d9af35487a8f4af11e2561d12.gif)
![BSS-QC-數(shù)據(jù)庫(kù)連接和事務(wù)管理專(zhuān)題_第3頁(yè)](http://file4.renrendoc.com/view/2da5f9a9d9af35487a8f4af11e2561d1/2da5f9a9d9af35487a8f4af11e2561d13.gif)
![BSS-QC-數(shù)據(jù)庫(kù)連接和事務(wù)管理專(zhuān)題_第4頁(yè)](http://file4.renrendoc.com/view/2da5f9a9d9af35487a8f4af11e2561d1/2da5f9a9d9af35487a8f4af11e2561d14.gif)
![BSS-QC-數(shù)據(jù)庫(kù)連接和事務(wù)管理專(zhuān)題_第5頁(yè)](http://file4.renrendoc.com/view/2da5f9a9d9af35487a8f4af11e2561d1/2da5f9a9d9af35487a8f4af11e2561d15.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-09-30根據(jù)zhaoxin的的意見(jiàn),修改了Hibernate的的session連連接管理劉世偉2007-11-8根據(jù)調(diào)優(yōu)組當(dāng)前的工作作,補(bǔ)充了一些內(nèi)內(nèi)容劉世偉幾個(gè)名詞解釋?zhuān)簲?shù)據(jù)庫(kù)連接池:眾所周周知,建立數(shù)據(jù)庫(kù)連接是一個(gè)個(gè)昂貴的操作,每次次都得花費(fèi)約0.05s1s的的時(shí)間,消耗一定的內(nèi)存資源(Oracle 9i的一個(gè)空閑連接約需需25MB內(nèi)存存,非空閑連接約約需幾十MB左右內(nèi)存),而且一旦到達(dá)達(dá)臨界點(diǎn),系統(tǒng)會(huì)會(huì)陷入資源管理的的惡性循環(huán):越來(lái)越慢。數(shù)據(jù)庫(kù)連接池的的基本思想就是為為數(shù)據(jù)庫(kù)連接建立立一個(gè)“緩沖池”。
2、預(yù)先在緩沖池池中放入一定數(shù)量量的連接備用,減少使用時(shí)時(shí)才創(chuàng)建、銷(xiāo)毀的消耗。當(dāng)需要建立數(shù)據(jù)據(jù)庫(kù)連接時(shí),只需需從“緩沖池”中中取出一個(gè),使用用完畢之后再放回回去。使用連接池池后,數(shù)據(jù)庫(kù)服務(wù)務(wù)器減少了它并不不擅長(zhǎng)的連接管理理工作,通過(guò)池連接的快速?gòu)?fù)用,可以為客戶戶端提供更大的并并發(fā)量,內(nèi)存消耗耗也在可控范圍內(nèi)內(nèi)波動(dòng)。我們可以以通過(guò)設(shè)定連接池池最大連接數(shù)來(lái)防防止系統(tǒng)無(wú)盡的與與數(shù)據(jù)庫(kù)連接,控控制數(shù)據(jù)庫(kù)的壓力。我們也可以通過(guò)連接池池的管理機(jī)制監(jiān)控控?cái)?shù)據(jù)庫(kù)連接的數(shù)量量使用情況,為為系統(tǒng)開(kāi)發(fā)測(cè)試試及性能調(diào)優(yōu)提供依據(jù)。真實(shí)連接:客戶端程序序直接和數(shù)據(jù)庫(kù)建立的Connection,使用完畢需要及時(shí)、安全的關(guān)閉,否
3、則會(huì)導(dǎo)致數(shù)據(jù)庫(kù)內(nèi)存資源泄漏、服務(wù)器宕機(jī)代理連接:客戶端程序序從連接池獲取的的Connection,它實(shí)際上是封裝了真實(shí)連接,提供和真實(shí)連接相同的功能,使用完畢也需要及時(shí)、安全的關(guān)閉,否則連接池中的連接得不到釋放,會(huì)導(dǎo)致連接池中可用的空閑連接越來(lái)越少。當(dāng)然,由于存在連接池的控制,數(shù)據(jù)庫(kù)不會(huì)因此而宕機(jī)。一、BSS數(shù)據(jù)庫(kù)連接接管理現(xiàn)狀:BSS系統(tǒng)中對(duì)數(shù)據(jù)庫(kù)庫(kù)連接的管理,是是統(tǒng)一通過(guò)數(shù)據(jù)源源(DataSource)管理的,存在連接池和單連接兩種方式的數(shù)據(jù)源(詳情參考modelxxx.jar中的xxxDatabase.xml文件)連接池?cái)?shù)據(jù)源,命名方方式為“xxxDataSource”,BSS采用了ap
4、ache的開(kāi)源池mons.dbcp.BasicDataSource,應(yīng)用程序獲取的是apache連接池的代理連接(connectionProxy),非真實(shí)連接。單連接數(shù)據(jù)源,命名方方式為“xxxDataSourceNoPool”,BSS采用了Spring框架的org.springframework.jdbc.datasource.DriverManagerDataSource,程序獲取的是真實(shí)的數(shù)據(jù)庫(kù)連接。二、BSS系統(tǒng)中對(duì)數(shù)數(shù)據(jù)源的使用Hibernate的的SessionFactory,使用的是連接池?cái)?shù)據(jù)源,在配置文件中一般命名為“xxxSessionFactory”,而且Hibernate
5、本身包含一個(gè)簡(jiǎn)單的連接池hibernate.connection,但性能和功能不如apache的。Spring的JdbcTemplate,根據(jù)其使用數(shù)據(jù)源是否為連接池,命名方式也不同,配置文件中對(duì)使用連接池?cái)?shù)據(jù)源的命名為“xxxJDBC”,使用單連接數(shù)據(jù)源的命名為“xxxJDBCNoPool”三、應(yīng)用程序中對(duì)連接接的使用BSS程序中使用Hibernate的的session和和JdbcTemplate提提供的通用方法一一般是夠用的,但但某些場(chǎng)景下如執(zhí)執(zhí)行oracle特特性的SQL語(yǔ)句或存儲(chǔ)儲(chǔ)過(guò)程,需要獲取取真實(shí)數(shù)據(jù)庫(kù)連接,現(xiàn)現(xiàn)在主要使用以下下幾種方式:Hibernate中中,通過(guò)getSessi
6、on().connection(),此時(shí)獲取的是連接是根根據(jù)其數(shù)據(jù)源決定定的,如果通過(guò)連連接池中獲取,則則是代理連接,否否則是真實(shí)數(shù)據(jù)庫(kù)庫(kù)連接,但注意,無(wú)論如何都不能用conn.close()語(yǔ)句顯示關(guān)閉的;這時(shí)候的conn其其實(shí)是被session管管理了,Hibernate會(huì)會(huì)在Session的的事務(wù)提交或回滾滾的時(shí)候,自動(dòng)把把連接放回池中,如果我我們主動(dòng)關(guān)了,會(huì)會(huì)拋異常。JdbcTemplate中中,通過(guò)jdbc.getDataSource().getConnection(),此時(shí)獲取的連接是根據(jù)據(jù)其數(shù)據(jù)源決定的的,如果jdbc.getDataSource()返回的是連接接池?cái)?shù)據(jù)源,則連連
7、接是連接池的連連接代理(重載了了真實(shí)連接的close方方法),需要從代代理連接中再次獲獲取真實(shí)連接,見(jiàn)見(jiàn)下面的a段落;如果返回的是單單連接的數(shù)據(jù)源,則則返回的是真實(shí)連連接。這2種連接接都需要顯式的close關(guān)關(guān)閉,前者表示把連接還還回連接池繼續(xù)使使用,后者表示真正關(guān)閉連接,釋釋放數(shù)據(jù)庫(kù)內(nèi)存。對(duì)JdbcTemplate中中返回代理連接的的情況,由于是連連接代理,對(duì)Oracle的的Blob和Clob大大數(shù)據(jù)對(duì)象,在CLOB.createTemporary(conn, true, CLOB.DURATION_SESSION)的時(shí)候,會(huì)拋ClassCastException,此時(shí)需要獲取真實(shí)的物理連接
8、,方法如下:設(shè)置DataSource中中連接池的accessToUnderlyingConnectionAllowed屬性的值為true,表示允許從連接代理中獲取物理連接;對(duì)apache的BasicDataSource,可通過(guò)mons.dbcp.DelegatingConnection的getDelegate()方法獲取真實(shí)連接。注意,通過(guò)連接池代理理連接而獲取的真真實(shí)連接一定不能直接關(guān)閉閉,否則連接池就就沒(méi)有意義了,最好把這種情況況下的獲取物理連接創(chuàng)建Clob用用方法屏蔽掉,防止被誤誤關(guān)閉。代碼掃描后發(fā)現(xiàn)系統(tǒng)中中普遍存在的問(wèn)題題:1、對(duì)打開(kāi)的數(shù)據(jù)庫(kù)資資源conn、ps、rs,主動(dòng)寫(xiě)了了clo
9、se語(yǔ)句句,但是沒(méi)有寫(xiě)在在finally語(yǔ)語(yǔ)句塊里面,一旦旦發(fā)生異常,那么么close語(yǔ)句句就會(huì)被旁路,導(dǎo)導(dǎo)致資源得不到釋釋放。2、沒(méi)有主動(dòng)寫(xiě)close語(yǔ)語(yǔ)句,當(dāng)然這個(gè)是是存在一些爭(zhēng)議的的,請(qǐng)看以下解釋釋?zhuān)?a、如果不使使用連接池機(jī)制,關(guān)閉connection,會(huì)自動(dòng)關(guān)閉resultset和和statement的的,程序中可以不不顯示關(guān)閉; b、如果使用用連接池,所謂謂的關(guān)閉connection,其實(shí)是將連接返返回給了連接池,連連接對(duì)象依然存在在,實(shí)際上不是是物理關(guān)閉,因此此,必須顯示的關(guān)閉resultset和和statement,否否則連接池中連接接上的rs和ps會(huì)會(huì)越來(lái)越多。3、單獨(dú)寫(xiě)了c
10、lose的的語(yǔ)句塊,到?jīng)]什什么問(wèn)題,看著不不舒服罷了。附件是代碼中問(wèn)題的位位置,請(qǐng)?jiān)斂?。建議:我們系統(tǒng)有使用連接池池和單獨(dú)創(chuàng)建連接接的,所以保險(xiǎn)起起見(jiàn),resultset和和statment(PreparedStatement、CallableStatement)一一定在finally語(yǔ)語(yǔ)句里面主動(dòng)保持持先后次序close掉掉,在此貼一下示示例程序。Connection con = null;PreparedStatement ps = null;ResultSet rs = null;try .catch (SQLException ex).finally try if(rs!=null)
11、rs.close(); catch (SQLException ex) /錯(cuò)誤處理 try if(ps!=null) ps.close(); catch (SQLException ex) /錯(cuò)誤處理 try if(con!=null)/注意:Hibernate中中得到的conn不不能關(guān)閉。 con.close(); catch (SQLException ex) /錯(cuò)誤處理 數(shù)據(jù)庫(kù)事務(wù)管理現(xiàn)狀:BSS中采用了Spring的的聲明式事務(wù)管理理,在配置文件中中通過(guò)對(duì)象或方法法的名稱(chēng)通配事務(wù)務(wù)的加載與否。由于存在以上的數(shù)據(jù)庫(kù)庫(kù)連接管理方式,所所以對(duì)數(shù)據(jù)庫(kù)的事事務(wù)管理也是存在在多種方式:Hibern
12、ate的的sessionJdbcTemplate通過(guò)session或或jdbcTemplate獲取的Connection,一般直接執(zhí)行sql語(yǔ)句和存儲(chǔ)過(guò)程存在的問(wèn)題:1、事務(wù)回滾規(guī)則只有DAOException(部部分),缺BssException 現(xiàn)在BMO中規(guī)范拋出BssException,一旦BMO方法中出現(xiàn)異常,現(xiàn)在的配置是事務(wù)不回滾的,導(dǎo)致前后數(shù)據(jù)不完整。 建議,spring事務(wù)配置里面加入強(qiáng)制回滾模式匹配: -mon.BssException,如下: PROPAGATION_REQUIRED,-mon.DAOException,-mon.BssException EJB事務(wù)回滾規(guī)則
13、: 1、如果bean拋出RuntimeException,容器會(huì)自動(dòng)回滾事務(wù),并且在外面包裝一個(gè)RemoteException拋出。 2、如果bean拋出其他的異常,容器不會(huì)做任何處理,除非強(qiáng)制定義。2、事務(wù)攔截粒度比較粗粗,定義在類(lèi)級(jí)別別而不是方法級(jí)別別 事務(wù)攔截器的的配置在bean的的名稱(chēng)上,該bean下下所有的方法都按按照同一種事務(wù)模模式 象readonly的的事務(wù)隔離模式,對(duì)對(duì)只查詢(xún)不修改的的方法,性能提高高比較大,但需要要更改攔截器,定定義在方法級(jí)別。 此條條只涉及性能,影影響不是很大,可可酌情。3、EJB和spring的的事務(wù)傳遞問(wèn)題 如果BMO中spring不不加載事務(wù),被EJB
14、包包裝后,發(fā)現(xiàn)EJB的的事務(wù)不能傳遞給給spring,EJB事務(wù)回滾了,但是spring管理bean的事務(wù)仍舊提交了,原因待詳查,初步分析是ejb容器和spring容器事務(wù)不能透?jìng)?,按照EJB規(guī)范,CMT(容器管理的事務(wù))內(nèi)部是不能有嵌套事務(wù)的。當(dāng)前為規(guī)避此種情況,建議所有的BMO,如果需要事務(wù)的,名稱(chēng)一律按照規(guī)范以“Manager”“DAO”結(jié)尾。調(diào)優(yōu)組正在組織力量集中解決這個(gè)問(wèn)題,初步思路是啟用EJB BMT(Bean 管理事務(wù)),使用websphere的事務(wù)管理和連接池存儲(chǔ)過(guò)程和Java事事務(wù)的嵌套問(wèn)題:在一個(gè)bmo中同時(shí)調(diào)調(diào)用幾個(gè)dao,dao中分別用hibernate、jdbc和存儲(chǔ)過(guò)程完成insert或update操作,事務(wù)是可以完整的,不過(guò)需要注意2點(diǎn):一是存儲(chǔ)過(guò)程里面不能能有commit和rollback二是dao調(diào)用存儲(chǔ)過(guò)過(guò)程后,dao中也不要寫(xiě)寫(xiě)commit和rollback,只要close就可以,由事務(wù)控制自動(dòng)提交,除非捕捉到bssexception,這里要在spring的事務(wù)攔截中配一下bssexception、daoException,這樣就可以控制異常的回滾。遺留問(wèn)題:采用連接池后,如果數(shù)數(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-2030全球顏料和染料噴墨標(biāo)簽打印機(jī)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)跑道人造草坪行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球汽車(chē)內(nèi)飾材料燃燒試驗(yàn)機(jī)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球大型球軸承(外徑尺寸在200mm以上)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球住宅用窗戶防蟲(chóng)網(wǎng)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)商用儲(chǔ)水式電熱水器行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球汽車(chē)空調(diào)風(fēng)門(mén)執(zhí)行器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)半導(dǎo)體高壓電源行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 幼兒繪本講述與演繹幼兒繪本的選擇講解
- 2025農(nóng)村房屋贈(zèng)與合同書(shū)
- 2024年全國(guó)職業(yè)院校技能大賽高職組(研學(xué)旅行賽項(xiàng))考試題庫(kù)(含答案)
- 十八項(xiàng)核心制度
- 2025社保政策培訓(xùn)
- 電器儀表人員培訓(xùn)課件
- 2025年中小學(xué)春節(jié)安全教育主題班會(huì)課件
- 2023年工程制圖習(xí)題集
- 計(jì)量經(jīng)濟(jì)學(xué)練習(xí)題
- 2025年全國(guó)高考體育單招考試模擬政治試卷試題(含答案詳解)
- 傳統(tǒng)春節(jié)習(xí)俗
- 反走私課件完整版本
- 四年級(jí)下冊(cè)數(shù)學(xué)知識(shí)點(diǎn)總結(jié)
評(píng)論
0/150
提交評(píng)論