2016-08-03 109 views
1

春季交易傳播如何適用於PROPAGATION_REQUIRED和PROPAGATION_REQUIRES_NEW?春季交易傳播類別級別和方法級別

請提供有關此類到類級別和方法級別傳播的信息。

我還需要知道如何初始化/啓動這些事務,並在PROPAGATION_REQUIRES_NEW當前事務完成時恢復以前的事務。

當PROPAGATION_REQUIRED和PROPAGATION_REQUIRES_NEW使用單個事務時,事務如何決定何時需要提交/回滾?

回答

3

希望這些信息可能有助於理解spring tx傳播的一些基本功能和流程。

這是關於將您從一些知名的資源,還可以找到傳播的一些基本信息,但它需要首先把這裏獲取關於Spring傳播的一些基本思路:

傳播是決定如何的能力業務方法應該封裝在邏輯或物理事務中。

REQUIRED行爲意味着如果在當前Bean方法執行上下文已經打開的交易,如果一個已經不存在,它會創建一個新的事務相同的事務將被使用。

REQUIRES_NEW行爲意味着一個新的物理事務總是由容器創建。

NESTED行爲使嵌套的Spring事務使用相同的物理事務,但在嵌套的調用之間設置保存點,以便內部事務也可以獨立於外部事務回滾。

強制行爲表明現有已打開的事務必須已經存在。如果沒有異常將被容器拋出。

從不行爲表明現有已打開的事務不能存在。如果事務存在,容器將拋出異常。

NOT_SUPPORTED行爲將在任何事務的範圍之外執行。如果已打開的事務已經存在,它將被暫停。

支持如果已打開的事務已存在,行爲將在事務的範圍內執行。如果沒有已經打開的交易方法,但無論如何在非事務方式執行。

====================================

一些已經還懷疑該怎樣就怎樣從同一個類中的一個方法調用不同的方法,如果我們提供的Tx傳播(如REQUIRES_NEW):

當方法調用是從同一個類中的方法調用方法時,它不會創建新的事務。它將使用相同的交易。此傳播僅適用於來自不同類的方法調用。

實施例:

<bean id="class2" parent="yourSpringAOPInterceptor"> 
    <property name="target"> 
     <bean class="Class2"> 
      <property name="prop1" ref="prop1" /> 
     </bean> 
    </property> 
    <property name="transactionAttributes"> 
     <props> 
      <prop key="*">PROPAGATION_REQUIRED</prop> 
      <prop key="methodABC">PROPAGATION_REQUIRES_NEW</prop> 
     </props> 
    </property> 
</bean> 

Class2中具有低於方法結構:

  • methodPQR()
  • methodABC()

    1)當任何呼叫來methodPQR( ),然後 這個方法使用sam外部呼叫者的電子交易。

    2)當有任何來自class2外的methodABC()調用,然後 這個方法創建新的事務並且不使用外部調用者的相同的 事務。 3)當methodPQR()調用methodABC()的方法相同時,methodABC() 不會創建新的事務並使用 methodPQR()的相同事務。

欲瞭解更多請參考:http://docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/transaction.html

================================= =====

這下面的圖片將幫助你瞭解這些事情:

  • 當第二個事務不是發生了什麼當前運行 第一個事務開始。

  • 所有方法使用相同事務時如何提交更改。 最內在的方法會提交所有更改或最外面的方法嗎?

  • 如果第二個事務得到任何異常會發生什麼? 是否應該僅回滾第二筆交易,還是應該先回滾並且第二筆交易是否爲 ?同樣的方式,如果第一個交易得到任何異常,那麼它將只回滾第一個交易,或者還有第二個(新內部)交易提交的 更改? - 春天 如何決定?

  • 第二個事務完成時第一個事務如何恢復?

enter image description here

感謝您的閱讀。如果您發現任何錯誤或有關於此的更多信息,請發表評論。