資源描述:
《Spring事務(wù)管理》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、Spring提供了一流的事務(wù)管理。在Spring中可以支持聲明式事務(wù)和編程式事務(wù)。本章主要目標(biāo)如下:1,Spring事務(wù)2,事務(wù)屬性3,事務(wù)管理器4,聲明式事務(wù)1.1Spring的事務(wù)事務(wù)管理在應(yīng)用程序中起著至關(guān)重要的作用:它是一系列任務(wù)的組成工作單元,在這個(gè)工作單元中,所有的任務(wù)必須同時(shí)執(zhí)行。它們只有二種可能執(zhí)行結(jié)果,要么所有任務(wù)全部執(zhí)行成功,要么所有任務(wù)全部執(zhí)行失敗。Spring中提供了豐富的事務(wù)管理功能,它們超過了EJB并且和EJB一樣支持聲明式事務(wù),重要的是Spring提供了致的事務(wù)管理,它有如下優(yōu)點(diǎn)。1,為不同的事務(wù)的AP
2、I提供一致的編程模式2,提供更簡單,更易地使用的編程式事務(wù)管理3,支持Spring聲明事務(wù)4,整合Spring對數(shù)據(jù)訪問的抽像1.2事務(wù)的ACID特性事務(wù)使用ACID特性來衡量事務(wù)的質(zhì)量。介紹如下:1,原子性事務(wù)必須是原子的,在事務(wù)結(jié)束的時(shí)候,事務(wù)中的所有任務(wù)必須全部成功完成,否則全部失敗,事務(wù)回滾到事務(wù)開始之間的狀態(tài)。2,一致性事務(wù)必須保證和數(shù)據(jù)庫的一致性,即數(shù)據(jù)庫中的所有數(shù)據(jù)和現(xiàn)實(shí)保持一致。如果事務(wù)失敗數(shù)據(jù)必須返回到事務(wù)執(zhí)行之前的狀態(tài),反之修改數(shù)據(jù)和現(xiàn)實(shí)的同步。3,隔離性隔離性是事務(wù)與事務(wù)之間的屏障,每個(gè)事務(wù)必須與其他事務(wù)的執(zhí)行
3、結(jié)果隔離開,直到該事務(wù)執(zhí)行完畢,它保證了事務(wù)的訪問的任何數(shù)據(jù)不會受其他事務(wù)執(zhí)行結(jié)果的影響。4,持久性如果事務(wù)成功執(zhí)行,無論系統(tǒng)發(fā)生任何情況,事務(wù)的持久性都必須保證事務(wù)的執(zhí)行結(jié)果是永久的。1.3事務(wù)之間的缺陷在事務(wù)處理中有違返A(chǔ)CID特性的3個(gè)問題:臟讀取,不可重復(fù)讀和幻讀行。如果存在多個(gè)并發(fā)事務(wù)在運(yùn)行,而這種事務(wù)操作了同一個(gè)數(shù)據(jù)來完成它們的任務(wù),就會導(dǎo)致3個(gè)問題的存生。要解決它們,就必須在事務(wù)之間定義合適的隔離級別。為保證事務(wù)的完整性,必須解決事務(wù)之間可能存在的3個(gè)問題。(1)臟讀取當(dāng)一個(gè)事務(wù)讀取了另一個(gè)事務(wù)尚未提交的更新,就叫臟讀
4、取。在另一個(gè)事務(wù)回滾的情況下,當(dāng)前事務(wù)所讀取的另一個(gè)事務(wù)的數(shù)據(jù)就是無效的。(2)不可重復(fù)讀取在一個(gè)事務(wù)中執(zhí)行多次同樣的查詢操作,但每次查詢的結(jié)果都不一樣,就叫做不可重復(fù)讀取,通常這種情況是由于數(shù)據(jù)在二次查詢之間被另一個(gè)并發(fā)的事務(wù)所修改。(3)幻影行這是對事務(wù)危害最小的一個(gè)問候,它類似不可重復(fù)讀取,也是一個(gè)事務(wù)的更新結(jié)果影響到另一個(gè)事務(wù)問題。但是它不僅影響另一個(gè)事務(wù)查詢結(jié)果,而且還會使查詢語句返回一些不同的行錄行。這3個(gè)問題危害程度依次為:臟讀取最大-->不可重復(fù)讀取-->幻影行最小。1.4事務(wù)的屬性本節(jié)主要介紹將事務(wù)策略應(yīng)用到方法的
5、屬性描述,其內(nèi)容包括事務(wù)的傳播行為,事務(wù)的隔離級別,事務(wù)的只讀和超時(shí)屬性。1,事務(wù)的傳播行為傳播行為是事務(wù)應(yīng)用于方法的邊界,它定義了事務(wù)的建立,暫停等行為屬性。在Spring中共有7種,EJBCMT共6種。*PROPAGATION_MANDATORY:規(guī)定了方法必須在事務(wù)中運(yùn)行,否則會拋出異常*PROPAGATION_NESTED:使方法運(yùn)行在嵌套事務(wù)中,否則這個(gè)屬性和PROPAGATION_REQUIRED屬性的義相同PROPAGATION_NEVER使當(dāng)前方法永遠(yuǎn)不在事務(wù)中運(yùn)行,否則拋出異常PROPAGATION_NOT_SUP
6、PORTED定義為當(dāng)前事務(wù)不支持的方法,在該方法運(yùn)行期間正在運(yùn)行的事務(wù)會被暫停*PROPAGATION_REQUIRED規(guī)定當(dāng)前的方法必須在事務(wù)中,如果沒有事務(wù)就創(chuàng)建一個(gè)新事務(wù),一個(gè)新事務(wù)和方法一同開始,隨著方法的返回或拋出異常而終止*PROPAGATION_REQUIRED_NEW當(dāng)前方法必須創(chuàng)建新的事務(wù)來運(yùn)行,如果現(xiàn)存的事務(wù)正在運(yùn)行就暫停它PROPAGATION_SUPPORTS規(guī)定當(dāng)前方法支持當(dāng)前事務(wù)處理,但如果沒有事務(wù)在運(yùn)行就使用非事務(wù)方法執(zhí)行以上定義Spring在事務(wù)中的傳播行為分別對應(yīng)EJB的事務(wù)CMT中的所有傳播行為,
7、其在PROPAGATION_NESTED是Spring在CMT之外定義的事務(wù)傳播行為。例如:PROPAGATION_REQUIRED,timeout_5,readOnlyPROPAGATION_REQUIREDPROPAGATION_REQUIRED2,事
8、務(wù)的隔離級別為解決事務(wù)之間的3個(gè)缺陷,必須在事務(wù)之間建立隔離關(guān)系來保證事務(wù)的完整性。ISOLATION_DEFAULT使用數(shù)據(jù)庫默認(rèn)的隔離級別ISOLATION_COMMITTED允許讀取其他并發(fā)事務(wù)已經(jīng)提交的更新(防此臟讀)ISOL