Spring 事務傳播行為


事務傳播行為

  指定是Spring中一個事務方法調用另一個事務方法時。處理的行為

 

使用方式:

@Transactional(propagation=Propagation.REQUIRED)

事務的使用過程中,用的最多的傳播行為是require,在大部分的mis系統里,可以對整個業務層切一個require的事務就可以滿足需要。但spring提供的不僅如此,對於復雜的業務,Spring也提供了相應的事務傳播行為來滿足業務需要。

 

Spring中的傳播行為如下:

  Require:支持當前事務,如果沒有事務,就建一個新的,這是最常見的;

  Supports:支持當前事務,如果當前沒有事務,就以非事務方式執行;

  Mandatory:支持當前事務,如果當前沒有事務,就拋出異常;

  RequiresNew:新建事務,如果當前存在事務,把當前事務掛起;

  NotSupported:以非事務方式執行操作,如果當前存在事務,就把事務掛起;

  Never:以非事務方式執行,如果當前存在事務,則拋出異常。

  Nested:新建事務,如果當前存在事務,把當前事務掛起。與RequireNew的區別是與父事務相關,且有一個savepoint。

  其中,Require、Supports、NotSupported、Never兩個看文字也就能了解,就不多說了。而Mandatory是要求所有的操作必須在一個事務里,較Require來說,對事務要求的更加嚴格。

  RequireNew:當一個Require方法A調用RequireNew方法B時,B方法會新new一個事務,並且這個事務和A事務沒有關系,也就是說B方法出現異常,不會導致A的回滾,同理當B已提交,A再出現異常,B也不會回滾。

  Nested:這個和RequireNew的區別是B方法的事務和A方法的事務是相關的。只有在A事務提交的時候,B事務都會提交。也就是說當A發生異常時,A、B事務都回滾,而當B出現異常時,B回滾,而A回滾到savepoint,如下代碼所示:

 1 public void A(){
 2     //操作1
 3     //操作2
 4     //操作3
 5     try{
 6         //savepoint
 7         B();//一個Nested的方法
 8     } catch{
 9         //出現異常,B方法回滾,A方法回滾到
10         //savepoint,也就是說操作1、2、3 都還在
11        C();
12     } finally{
13  
14     }
15  
16 }   

 


免責聲明!

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



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