spring事務管理tx:Advice詳解_第1頁
spring事務管理tx:Advice詳解_第2頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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 /* 事務屬性配置為 PROPAGATION_REQUIRED*/* 事務屬性

4、配置為 PROPAGATION_REQUIRED*/*1: PROPAGATION_REQUIRED加當前正要執的事務不在另外個事務,那么就起個新的事務如說,ServiceB.methodB的事務級別定義為PROPAGATION_REQUIRED, 那么由于執ServiceA.methodA的時候,ServiceA.methodA已經起了事務,這時調ServiceB.methodB,ServiceB.methodB看到已經運在ServiceA.methodA的事務內部,就不再起新的事務。假如ServiceA.methodA運的時候發現沒有在事務中,他就會為分配個事務。這樣,在ServiceA.

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論