spring事務(wù)管理tx:Advice詳解_第1頁
spring事務(wù)管理tx:Advice詳解_第2頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、 spring事務(wù)管理tx:Advice詳解默認的 設(shè)置如下:任何 RuntimeException 將觸發(fā)事務(wù)回滾,但是任何 checked Exception 將不觸發(fā)事務(wù)回滾這些默認的設(shè)置當(dāng)然也是可以被改變的。 和 標簽的 各種屬性設(shè)置總結(jié)如下:rollback-for/no-rollback-for:配置哪些異常可以導(dǎo)致/不導(dǎo)致回滾,在默認情況下,拋出RuntimeException或其類將導(dǎo)致回滾,其它異常不會導(dǎo)致回滾.tx:method屬性類型默認值說明與事務(wù)屬性關(guān)聯(lián)的法名。通配符(*)可以來指定批關(guān)聯(lián)到相同的事務(wù)屬性的name是法。 如:get* 、handle* 、on*Eve

2、nt 等等。propagationREQUIREDDEFAULT(所數(shù)據(jù)庫默認級別)isolationread-onlytimeoutbooleanintfalse-1是否才優(yōu)化的只讀事務(wù)超時(秒)rollbackForClass需要回滾的異常類不需要回滾的異常類noRollbackFor ClassSpring中事物的傳播級別:PROPAGATION_REQUIRES_NEW-新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。PROPAGATION_NOT_SUPPORTED-以事務(wù)式執(zhí)操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。PROPAGATION_NEVER-以事務(wù)式執(zhí),如果當(dāng)前存在事務(wù),則拋

3、出異常。/*/* */int PROPAGATION_REQUIRED = 0;/* Support a current transaction, execute non-transactionally if none exists.*/*/int PROPAGATION_MANDATORY = 2;/*int PROPAGATION_REQUIRES_NEW = 3;/*int PROPAGATION_NEVER = 5;/*int PROPAGATION_NESTED = 6; *sample*ServiceA /* 事務(wù)屬性配置為 PROPAGATION_REQUIRED*/* 事務(wù)屬性

4、配置為 PROPAGATION_REQUIRED*/*1: PROPAGATION_REQUIRED加當(dāng)前正要執(zhí)的事務(wù)不在另外個事務(wù),那么就起個新的事務(wù)如說,ServiceB.methodB的事務(wù)級別定義為PROPAGATION_REQUIRED, 那么由于執(zhí)ServiceA.methodA的時候,ServiceA.methodA已經(jīng)起了事務(wù),這時調(diào)ServiceB.methodB,ServiceB.methodB看到已經(jīng)運在ServiceA.methodA的事務(wù)內(nèi)部,就不再起新的事務(wù)。假如ServiceA.methodA運的時候發(fā)現(xiàn)沒有在事務(wù)中,他就會為分配個事務(wù)。這樣,在ServiceA.

5、methodA或者在ServiceB.methodB內(nèi)的任何地出現(xiàn)異常,事務(wù)都會被回滾。即使ServiceB.methodB的事務(wù)已經(jīng)被提交,但是ServiceA.methodA在接下來fail要回滾,ServiceB.methodB也要回滾2: PROPAGATION_SUPPORTS如果當(dāng)前在事務(wù)中,即以事務(wù)的形式運,如果當(dāng)前不再個事務(wù)中,那么就以事務(wù)的形式運3: PROPAGATION_MANDATORY必須在個事務(wù)中運。也就是說,他只能被個事務(wù)調(diào)。否則,他就要拋出異常4: PROPAGATION_REQUIRES_NEW這個就較繞了。 如我們設(shè)計ServiceA.methodA的事務(wù)級

6、別為如果他拋出的異常被ServiceA.methodA捕獲,ServiceA.methodA事務(wù)仍然可能提交。5: PROPAGATION_NOT_SUPPORTED 當(dāng)前不持事務(wù)。如ServiceA.methodA的事務(wù)級別是PROPAGATION_REQUIRED ,ServiceB.methodB的事務(wù)級別是PROPAGATION_NOT_SUPPORTED , 那么當(dāng)執(zhí)到ServiceB.methodB時,ServiceA.method的事務(wù)掛起,他以事務(wù)的狀態(tài)運完,再繼續(xù)ServiceA.methodA的事務(wù)。6: PROPAGATION_NEVER不能在事務(wù)中運。假設(shè)Service

7、A.methodA的事務(wù)級別是PROPAGATION_REQUIRED,ServiceB.methodB的事務(wù)級別是PROPAGATION_NEVER , 那么ServiceB.methodB就要拋出異常了。7: PROPAGATION_NESTED理解Nested的關(guān)鍵是savepoint。他與PROPAGATION_REQUIRES_NEW的區(qū)別是,PROPAGATION_REQUIRES_NEW另起個事務(wù),將會與他的事務(wù)相互獨,Nested的事務(wù)和他的事務(wù)是相依的,他的提交是要等和他的事務(wù)塊提交的。也就是說,如果事務(wù)最后回滾,他也要回滾的。Nested事務(wù)的好處是他有個savepoint。*ServiceA /* 事務(wù)屬性配置為 PROPAGATION_REQUIRED*/savepointServiceB.methodB(); /PROPAGATION_NESTED 級別 catch (SomeException) / 執(zhí)其他業(yè)務(wù), 如 ServiceC.methodC()

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論