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...