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

下載本文檔

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

文檔簡(jiǎn)介

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

2、nt 等等。propagationREQUIREDDEFAULT(所數(shù)據(jù)庫(kù)默認(rèn)級(jí)別)isolationread-onlytimeoutbooleanintfalse-1是否才優(yōu)化的只讀事務(wù)超時(shí)(秒)rollbackForClass需要回滾的異常類不需要回滾的異常類noRollbackFor ClassSpring中事物的傳播級(jí)別: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ù)不在另外個(gè)事務(wù),那么就起個(gè)新的事務(wù)如說(shuō),ServiceB.methodB的事務(wù)級(jí)別定義為PROPAGATION_REQUIRED, 那么由于執(zhí)ServiceA.methodA的時(shí)候,ServiceA.methodA已經(jīng)起了事務(wù),這時(shí)調(diào)ServiceB.methodB,ServiceB.methodB看到已經(jīng)運(yùn)在ServiceA.methodA的事務(wù)內(nèi)部,就不再起新的事務(wù)。假如ServiceA.methodA運(yùn)的時(shí)候發(fā)現(xiàn)沒(méi)有在事務(wù)中,他就會(huì)為分配個(gè)事務(wù)。這樣,在ServiceA.

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

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

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

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論