Spring事務的兩種常用傳播方式

2021-08-28 03:41:37 字數 1018 閱讀 1249

為什麼會有事務的傳播方式呢?

因為有時候是有巢狀事務的存在的。

就比如買一書的時候你給加了事務(鎖住一本書減庫存,減餘額),

那如果買多本書呢?

可以在買多本書的方法上加事務。

這就形成了巢狀事務。

使用propagation指定事務的傳播方式,

即當前事務方法被另乙個事務方法呼叫時如何使用事務。

常用的有·兩種方式·來實現巢狀事務的實現:

//預設情況下,即使用當前方法的事務。

@transactional(propagation = propagation.required)

//建立新的事務。

@transactional(propagation = propagation.requires_new)

兩張圖來區別下:

簡而言之兩者區別:巢狀事務中

propagation.required :

以外層巢狀事務為單元,只要有任意乙個事務的操作錯誤,終止全部內容。
propagation.requires_new:

以內層巢狀事務為單元,只終止發生錯誤的事務,其他事務互不影響。
注意:

預設是:propagation.required
記住:@transactional(propagation = propagation.requires_new)是加在內層的事務中,而不是外層的事務。

spring事務的7種傳播機制

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

Spring的7種事務傳播行為

事務傳播行為指的是乙個事務方法被另乙個事務方法呼叫時,這個事務方法應該如何進行。比如說,有乙個a方法,裡面呼叫了b方法,當執行到b方法時,是應該在當前事務裡執行,還是重新開啟乙個事務來執行,這是由b方法的事務傳播行為決定的 propagation required 表明當前方法一定要在事務中執行,如...

Spring事務的7種傳播行為

事務傳播行為指的就是當事務方法被另乙個事務方法呼叫時,這個事務方法應該如何進行。例如 methoda事務方法呼叫methodb事務方法時,methodb是繼續在呼叫者methoda的事務中執行呢,還是為自己開啟乙個新事務執行,這就是由methodb的事務傳播行為決定的。以下舉例時 方法a 中呼叫方法...