Spring事物的傳播

2022-03-20 18:13:13 字數 971 閱讀 7313

spring的事物對於同乙個類內部呼叫是不會生效的。

比如乙個servicea,裡面有個方法x()和y()。其中x沒有配置事物,而y配置的有實物。如果是乙個沒有事物的serviceb呼叫了servicea的x方法,而在x裡面直接通過this.y()的方式呼叫y方法。那麼y是不會有實物的,就算配置成propagation_required 也是不會有事物的。

反之,如果是沒有事物的serviceb先呼叫的servicea的y,而y又內部呼叫x這時候是有事物的。

原理很簡單,只有被spring託管的呼叫方式它才能在外層封裝事物。

execution(* com.aaa.somedao.*(..))  第乙個* 號表示任意返回值,後面的*(..)表示任意引數

propagation_required  如果當前沒有事務,就新建乙個事務,如果已經存在乙個事務中,加入到這個事務中。這是最常見的選擇。

propagation_supports  支援當前事務,如果當前沒有事務,就以非事務方式執行。

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

propagation_requires_new  新建事務,如果當前存在事務,把當前事務掛起。

propagation_not_supported  以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。

propagation_never  以非事務方式執行,如果當前存在事務,則丟擲異常。

propagation_nested  如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則執行與propagation_required類似的操作。

我們系統啟動事物的方式是:先通過aspectjexpressionpointcutadvisor攔截,然後txadviser用org.springframework.transaction.interceptor.transactioninterceptor來管理事物。

spring事物傳播性

propagation propagation.required 如果有事務,那麼加入事務,沒有的話新建乙個 預設情況下 transactional propagation propagation.not supported 容器不為這個方法開啟事務 transactional propagatio...

spring事物傳播行為

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

Spring的事物傳播行為

以下討論基於a.methoda 呼叫b.methodb 若b的事務隔離級別為 propagation required 外面影響裡面,裡面不影響外面 若a的方法沒有事務,則建立乙個新事務,若有事務,則加入當前事務。如果a的方法a丟擲異常,則a,b的方法都會回滾,如果b的方法b丟擲異常,則看a有沒有捕...