1. 程式人生 > >spring事務的傳播機制與事務掛起

spring事務的傳播機制與事務掛起

·事務的傳播機制:(不是JDBC事務管理)用來解決業務層的事務之間呼叫的問題。

          PROPAGATION_REQUIRED     :支援(使用)當前事務,如果不存在事務就建立一個新事務

                 *方法A中呼叫方法B:  如果方法A有事務,B方法就使用方法A的事務。如果A沒有事務,就建立一個新事務。A,B在同一個事務中)

          PROPAGATION_SUPPORTS    :支援(使用)當前事務,如果不存在事務就不使用事務

          PROPAGATION_MANDATORY     :支援(使用)當前事務,如果不存在就丟擲異常

          PROPAGATION_REQUIRES_NEW     :如果有事務存在,則掛起當前事務,建立一個新事務。(不在同一事務

          PROPAGATION_NOT_SUPPORTED     :已非事務的方式執行,如果有事務存在,則掛起當前事務。

          PROPAGATION_NEVER     :已非事務的方式執行,如果有事務存在,則丟擲異常。

          PROPAGATION_NESTED     : 如果當前事務存在,則巢狀事務執行

   *基於savePoint(儲存點)技術

                         *方法A.B: A有事務,A執行之後,將A事務執行之後的內容儲存到savePoint,如果B事務出現異常的話,使用者需要自己設定提交事務還是回滾。

      常用的:

                PROPAGATION_REQUIRED 

                PROPAGATION_REQUIRES_NEW

                PROPAGATION_NESTED

·關於事務掛起的舉例:(某事務掛起之後,任何操作都不在該事務的控制之下)

例如: 方法A支援事務,方法B不支援事務。    即PROPAGATION_NOT_SUPPORTED 方法A呼叫方法B。 在方法A開始執行時,系統為它建立Transaction,方法A中對於資料庫的處理操作,會在該Transaction的控制之下。 這時,方法A呼叫方法B,方法A開啟的 Transaction將掛起,方法B中任何資料庫操作,都不在該Transaction的管理之下。 當方法B返回,方法A繼續執行,之前的Transaction回覆,後面的資料庫操作繼續在該Transaction的控制之下 提交或回滾。