Spring的七個事務傳播行為,spring七個事務

來源:互聯網
上載者:User

Spring的七個事務傳播行為,spring七個事務
Spring的七個事務傳播行為Spring事務種類Spring事務含有七個層級,分別如下:REQUIREDREQUIRED是Spring的預設事務層級,如果存在一個事務,則支援當前事務。如果沒有事務則開啟一個新的事務,具體表現在方法上加入註解@Transactional(rollbackFor=Exception.class,propagation = Propagation.REQUIRED),以下幾個層級相同。SUPPORTS如果存在一個事務,支援當前事務。如果沒有事務,則非事務的執行。但是對於事務同步的交易管理員,SUPPORTS與不使用事務有少許不同。
MANDATORY如果已經存在一個事務,支援當前事務。如果沒有一個活動的事務,則拋出異常。
REQUIRES_NEW總是開啟一個新的事務。如果一個事務已經存在,則將這個存在的事務掛起。NOT_SUPPORTED總是非事務地執行,並掛起任何存在的事務。
NEVER總是非事務地執行,如果存在一個活動事務,則拋出異常
NESTED如果一個活動的事務存在,則運行在一個嵌套的事務中. 如果沒有活動事務, 則按REQUIRED 屬性執行
資料驗證根據上一篇部落格Spring boot 用mybatis串連資料庫的例子,不斷改變事務層級得到以下資料

調用方法A事務 被呼叫者法B事務 A方法是否捕獲B方法 調用方法A拋出異常 被呼叫者法B拋出異常 調用方法資料是否入庫 被呼叫者法資料是否入庫 結論
REQUIRED REQUIRED 兩個方法在同一個事務中,如果上下文有事務則加入其中,如果沒有則建立新事務。
REQUIRED REQUIRED
REQUIRED SUPPORTS 當上下文有事務時,則加入事務中,如果沒有事務則執行無事務操作,
即時被呼叫者法出錯了也不會有復原操作
NEVER SUPPORTS
REQUIRED MANDATORY 報No existing transaction found for transaction marked with propagation 'mandatory'錯誤,說明MANDATORY上下文中有事務時則加入其中,如果沒有則直接報上述錯誤
NEVER MANDATORY
REQUIRED REQUIRES_NEW REQUIRES_NEW每次都要一個新事務,如果子事務拋出異常並且父事務捕獲了子事務異常,則父事務不復原,否則兩者都要復原;如果父事務調用子事務後父事務拋出異常,則子事務不復原,而父交易回復。
REQUIRED REQUIRES_NEW
REQUIRED REQUIRES_NEW
REQUIRED NOT_SUPPORTED 定義了NOT_SUPPORTED事務的方法,不管自己是否出錯都會提交事務,調用方法A如果調用了方法B,並且捕獲了B的異常,則方法A會提交事務,否則復原事務。
REQUIRED NOT_SUPPORTED
REQUIRED NOT_SUPPORTED
REQUIRED NEVER 直接報“ Existing transaction found for transaction marked with propagation 'never'”異常
REQUIRED NESTED NESTED,嵌套事務,如果子事務發生異常,並且父事務對子事務進行了異常捕獲,則子交易回復,父事務不復原,否則都要復原;只要父事務發生異常,父事務子事務都復原,這個與REQUIRES_NEW不一樣;
REQUIRED NESTED
REQUIRED NESTED





也可參考http://blog.csdn.net/linuu/article/details/51006780



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.