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的控制之下 提交或回滾。