這幾天看了一下guzz這個orm框架,突然看到事務這塊去複習了一下spring事務
一些東西,就看到了事務傳播行為
。之前一直覺得這一塊比較混亂,所以在稍微整理一下
事務傳播行為主要針對被呼叫的業務物件。
事務的傳播行為表示整個事務處理過程所跨越的業務物件,將以什麼樣的行為參與事比如a.service()呼叫了b.service()的業務層方法,那麼這個傳播行為就是針對b.service()這個方法的。與a無關。
傳播行為有一下七種
propagation_supports。
propagation_mandatory。
propagation_requires_new
propagation_not_supported
propagation_never
propagation_nested
傳播行為
呼叫者事務 (a)
當前事務(b)
異常情況
propagation_required有加入
b異常,a有沒有捕獲大家都一起回滾
無建立乙個新的事務
propagation_supports有加入
無直接執行
propagation_mandatory有加入
無報錯propagation_requires_new
有掛起呼叫者事務,新建乙個事務
無新建乙個事務
propagation_not_supported
有掛起呼叫者事務
無直接執行
propagation_never有報錯
無直接執行
propagation_nested
有新建乙個事務,並作為呼叫者的子事務
b異常,a捕獲了的話只有b回滾
;a未捕獲的話大家一起回滾
無新建乙個事務
下面就先簡單測試兩個比較有點疑惑的。
**結果及資料庫結果
結論:即使catch住了異常,但是還是一起回滾了。
捕獲異常的結果
可以看到:當捕獲了異常以後。外部事務正常執行,而當前事務則進行了回滾
。
未捕獲異常的結果
未捕獲異常。大家一起回滾
。
參考了一些資料:
以及《spring揭秘》這本書;這本書寫的的確很不錯,值得去學習研究。
可能有一些地方會存在一些問題,後期深入了解一點會進行完善。
spring 事務傳播行為
事務傳播行為種類 spring在transactiondefinition介面中規定了7種型別的事務傳播行為,它們規定了事務方法和事務方法發生巢狀呼叫時事務如何進行傳播 事務傳播行為型別 事務傳播行為型別 說明propagation required 如果當前沒有事務,就新建乙個事務,如果已經存在乙...
Spring事務傳播行為
你們說一下什麼是傳播行為,有幾種傳播行為,是不是有7種傳播行為,你們看一段 就知道傳播行為是怎麼用的,它是產生在 多個事務中,我定義乙個 class userservice 這個行為你不會不知道,行為是基礎知識,userdao.add 是不是這樣的,我在add方法上加上註解,logservice.a...
Spring事務傳播行為
什麼是spring事務傳播行為?事務傳播行為用來描述由某乙個事務傳播行為修飾的方法被巢狀進另乙個方法的時,事務如何傳播。假設servicea 中方法a 呼叫 serviceb中方法 b b被事務修飾 那麼會有兩種情況 方法a有事務,方法b有事務 方法a沒有事務,方法b有事務 spring中的事務傳播...