spring中的事務傳播機制


1、事務的實現思想

  在spring中要想某個方法具有事務,只要在方法前加一個@Transactional注解。然后spring就會利用aop思想,在這個方法執行前開啟事務,

  在方法執行后選擇提交事務或者回滾事務。

2、7種事務傳播機制

1  @Transactional(propagation = Propagation.REQUIRED)
2     public void A(){
3         //doSomething
      B();
      //doSomething
4 } 5 6 @Transactional(propagation = ?) 7 public void B(){ 8 //doSomething 9 }

 

  1、REQUIRED:

      spring默認事務,如果當前沒有事務就創建一個事務,如果當前有事務就當入該事務。如果此時B設置為REQUIRED,A調用B后B中的代碼會加入A中的事務,一起回滾或提交。

  2、SUPPORTS:

      有事務就按有事務執行,沒有事務就以非事務方式執行。如果此時B設置為SUPPORTS,單獨調用B會以非事務的方式執行,A調用B是,B中的代碼會加入A中的事務。

  3、MANDATORY:

      必須要有事務,如果沒有事務就會報錯。如果B設置為MANDATORY,單獨調用B會報錯,A調用B時,B中的代碼會加入A中的事務,一起回滾或提交。

  4:REQUIRES_NEW:

      不管有沒有事務都會創建一個新的事務。如果B設置為REQUIRES_NEW,單獨調用B會創建事務,A調用B時,B也會創建一個新事務t2,A事務t1和t2互不影響,各自提交回滾自己的事務。

  5、NOT_SUPPORTED:

      不支持事務,如果有事務就會把事務掛起。如果B設置為NOT_SUPPORTED,單獨調用B沒有事務,A調用B時,運行到B中代碼時,會把事務掛去。

  6、NEVER:

      不支持事務,如果有事務就會報錯。如果B設置為NEVER,單獨調用B沒有事務,A調用B時會報錯。

  7、NESTED:

      嵌套事務,當前有事務時就嵌套執行事務,當前沒有事務時就按REQUIRED屬性執行。如果B設置為NESTED,單獨調用B會創建一個事務。A調用B時,B會創建一個回滾點,B中代碼

      拋出異常時會回滾到這個回滾點,A中的代碼可以繼續往下執行,但是A中代碼出異常后會連帶着B一起回滾。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM