Spring的事物傳播行為

2021-08-07 20:30:19 字數 1197 閱讀 7969

以下討論基於a.methoda()呼叫b.methodb();

若b的事務隔離級別為:

propagation_required:(外面影響裡面,裡面不影響外面)

若a的方法沒有事務,則建立乙個新事務,若有事務,則加入當前事務。

如果a的方法a丟擲異常,則a,b的方法都會回滾,

如果b的方法b丟擲異常,則看a有沒有捕獲,沒有捕獲的話,a會回滾,捕獲了的話,則會拋出新的異常,不會回滾

propagation_requires_new:(外面不影響裡面,裡面(不)影響外面)

若a的方法沒有事務,則新建乙個事務,若有事務,就建立乙個新事務。

若a的方法有事務,

如果a的方法a丟擲異常,則a的事務回滾,b的事務不受影響

如果b的方法b丟擲異常,則b回滾,a不捕獲則回滾,捕獲則不受影響

propagation_nested :(外面的影響裡面的,裡面的(不)影響外面的)

若a的方法沒有事務,則新建乙個事務,若有事務,則在裡面巢狀乙個事務。

若a的方法沒有事務,

如果b的方法b丟擲異常,則b回滾,a不回滾;

如果a的方法a丟擲異常,則都不回滾

若a的方法有事務:

如果b的方法丟擲異常,則b回滾

如果a的方法不捕獲異常,則回滾,捕獲則不回滾

如果a的方法丟擲異常,則都回滾

propagation_supports:(外面的影響裡面的,裡面的影響外面的)

如果a沒有事務,則b以非事務的方式執行,如果a有事務,則使用當前事務;

如果a沒有事務,則a和b的執行出現異常都不會回滾

如果a有事務,

a的方法a丟擲異常,a和b都會回滾。

b的方法b丟擲異常,a和b都會回滾。

propagation_not_supported:

如果a沒有事務,就以非事務方式執行,如果有,就將當前事務掛起。

propagation_never:

如果a沒有事務,就以非事務方式執行,如果有,就丟擲異常。

propagation_mandatory:(外面的影響裡面的,裡面的影響外面的)

如果a沒有事務,就丟擲異常,如果a有事務,就使用當前事務。

如果a有事務

如果a的方法丟擲異常,則a和b都會回滾

如果b的方法丟擲異常,則a和b也都會回滾

參考文章:

spring事物傳播行為

propagation required 如果當前沒有事務,就新建乙個事務,如果已經存在乙個事務中,加入到這個事務中。這是最常見的選擇。propagation supports 支援當前事務,如果當前沒有事務,就以非事務方式執行。propagation mandatory 使用當前的事務,如果當前沒...

Spring事物的傳播行為

在service類前加上 transactional,宣告這個service所有方法需要事務管理。每乙個業務方法開始時都會開啟乙個事務。spring預設情況下會對執行期例外 runtimeexception 進行事務回滾。這個例外是unchecked 如果遇到checked意外就不回滾。如何改變預設...

spring事物傳播行為說明

spring在transactiondefinition介面中規定了7種型別的事務傳播行為,規定了事務方法和事務方法發生巢狀呼叫時事務如何進行傳播。種類說明 propagation required 如果當前沒有事務,就新建乙個事務,如果已經存在乙個事務中,加入到這個事務中。這是最常見的選擇。pro...