spring事務的7種傳播機制

2021-10-02 19:35:34 字數 1030 閱讀 2043

spring事務的傳播行為

在service類前加上@transactional,宣告這個service所有方法需要事務管理,每乙個業務方法開始時都會開啟乙個事務。

spring預設情況下會對執行期例外(runtimeexception)進行回滾,這個例外是unchecked的,如果是checked的就不回滾。

如果改變預設規則:

1.讓checked例外也回滾,在整個方法前加上:

@transactional(rollbackfor = exception.class)

2.讓unchecked例外不回滾:

@transanctional(notrollbackfor = runtimeexception)

對於spring的傳播行為分為以下7中:

1.required:

業務方法需要在乙個容器裡執行。如果方法執行時已經處於乙個事務中,那麼加入到這個事務。否則自己新建乙個新的事務。(統一回滾)

2.surpported:

該方法在某個事務範圍內被呼叫,則方法成為該事務的一部分。如果方法在事務範圍外被呼叫,該方法就在沒有事務的環境下執行。

3.requires-new:

不管是否存在事務,該方法總會為自己發起乙個新事務。如果方法已經執行在乙個事務中,則將當前事務掛起,重新建立乙個新事務。(各自回滾)

4.not-surpported:

宣告方法不需要事務。如果方法沒有關聯到乙個事務,容器不會為他開啟事務,如果方法在乙個事務中被呼叫,該事務會被掛起,呼叫結束後,原先的事務會恢復執行。

5.mandatory:

該方法只能在乙個已經存在的事務中執行,業務方法不能發起自己的事務。如果在沒有事務的環境下被呼叫,容器丟擲異常。

6.nested:

如果乙個活動的事務存在,則執行在乙個巢狀的事務中。如果沒有活動事務,則按照required屬性執行。(內部的回滾不會對外部產生影響,但是外部回滾時內部會一起回滾)

7.never:

該方法絕對不能在事務範圍內執行,如果在就丟擲異常。只有該方法沒有關聯到任何事務,才能正常執行。

Spring事務傳播機制

在 spring的 transactiondefinition介面中一共定義了7種事務傳播屬性 propagation required 支援當前事務,如果當前沒有事務,就新建乙個事務。這是最常見的選擇,也是spring事務傳播機制的預設值。propagation supports 支援當前事務,如...

spring事務傳播機制

1.required 必須有乙個事務的支援。如果沒有事務,則新建立乙個,如果有父事務,則使用 fetch 父級事務 2.requires new 必定會建立乙個事務。如果有父事務,則掛起 suspend 父事務,等子事務執行完畢,在恢復 resume 父事務 3.supports 可以有或者沒有事務...

spring事務傳播機制

spring事務傳播機制 propagation required spring預設 如果已經存在事務,那麼加入當前事務,如果不存在事務,則新建事務。總是建立乙個新的事務。新建立事務a,而以前的事務b還在執行。此時有兩個事務,事務a先執行,事務b則被掛起。只有事務a執行完畢後,事務b將繼續執行。ro...