中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring中的事務隔離級別和傳播行為是什么

發布時間:2023-03-16 10:21:15 來源:億速云 閱讀:215 作者:iii 欄目:開發技術

這篇文章主要講解了“Spring中的事務隔離級別和傳播行為是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring中的事務隔離級別和傳播行為是什么”吧!

傳播行為

在SpringBoot中通過Transactional的propagation屬性來指定,Transactional注解的具體源碼如下所示

public @interface Transactional {
 
@AliasFor("transactionManager")
String value() default "";
 
@AliasFor("value")
String transactionManager() default "";
 
Propagation propagation() default Propagation.REQUIRED;
 
Isolation isolation() default Isolation.DEFAULT;
 
}

可以看出,默認的值是Propagation.REQUIRED;

其他的還有:

  • 1>PROPAGATION_REQUIRED支持當前事務,假設當前沒有事務。就新建一個事務。

  • 2>PROPAGATION_SUPPORTS支持當前事務,假設當前沒有事務,就以非事務方式運行。

  • 3>PROPAGATION_MANDATORY支持當前事務,假設當前沒有事務,就拋出異常。 

  • 4>PROPAGATION_REQUIRES_NEW新建事務,假設當前存在事務。把當前事務掛起。

  • 5>PROPAGATION_NOT_SUPPORTED以非事務方式運行操作。假設當前存在事務,就把當前事務掛起。

  • 6>PROPAGATION_NEVER以非事務方式運行,假設當前存在事務,則拋出異常。

  • 7>PROPAGATION_NESTED如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則進行與PROPAGATION_REQUIRED類似的操作。

舉個例子進行說明

ServiceA {
       
     void methodA() {
         ServiceB.methodB();
     }
}
 
ServiceB {
       
     void methodB() {
     }
}

1>PROPAGATION_REQUIRED

如果當前執行的事務不在另外一個事務里,就新起一個事務;ServiceB和 ServiceA在同一個事務里面,ServiceB如果異常,則整個事務認為是執行失敗的,即便是在A里面try catch了異常也會導致A和B都回滾;同樣,即便B執行成功,A執行報錯產生異常,那么A和B都會回滾的。

Spring中的事務隔離級別和傳播行為是什么

2>PROPAGATION_SUPPORTS

假設當前在事務中。即以事務的形式執行。假設當前不再一個事務中,那么就以非事務的形式執行;

3>PROPAGATION_MANDATORY

支持當前事務,假設當前沒有事務,就拋出異常,也就是說他必須在一個父事務中去執行;否則就會拋出異常;

4>PROPAGATION_REQUIRES_NEW

新建事務,假設當前存在事務,把當前事務掛起;比如服務A的事務級別是PROPAGATION_REQUIRED,那么服務B的級別是PROPAGATION_REQUIRES_NEW;那么當運行到ServiceB.methodB的時候,ServiceA.methodA所在的事務就會掛起。

ServiceB.methodB會起一個新的事務,等待ServiceB.methodB的事務完畢以后,他才繼續運行;跟PROPAGATION_REQUIRED的區別是會新起一個事務,而不是使用父事務,所以是兩個截然不同的事務,ServiceB的執行報錯,如果被ServiceA捕獲了,不會影響到ServiceA的回滾。

Spring中的事務隔離級別和傳播行為是什么

5>PROPAGATION_NOT_SUPPORTED

當前不支持事務,比方ServiceA.methodA的事務級別是PROPAGATION_REQUIRED 。

而ServiceB.methodB的事務級別是PROPAGATION_NOT_SUPPORTED ,那么當執行到ServiceB.methodB時。

ServiceA.methodA的事務掛起。而他以非事務的狀態執行完,再繼續ServiceA.methodA的事務。

6>PROPAGATION_NEVER

不能在事務中執行。

如果ServiceA.methodA的事務級別是PROPAGATION_REQUIRED。

而ServiceB.methodB的事務級別是PROPAGATION_NEVER ,那么ServiceB.methodB就要拋出異常了。 

7>PROPAGATION_NESTED

理解Nested的關鍵是savepoint。

他與PROPAGATION_REQUIRES_NEW的差別是,PROPAGATION_REQUIRES_NEW另起一個事務。將會與他的父事務相互獨立。

而Nested的事務和他的父事務是相依的,他的提交是要等和他的父事務一塊提交的。

也就是說,假設父事務最后回滾。他也要回滾的。 

感謝各位的閱讀,以上就是“Spring中的事務隔離級別和傳播行為是什么”的內容了,經過本文的學習后,相信大家對Spring中的事務隔離級別和傳播行為是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海林市| 眉山市| 屏东县| 兴义市| 尚志市| 华宁县| 邢台市| 丹棱县| 安龙县| 永昌县| 塔河县| 从化市| 工布江达县| 仲巴县| 儋州市| 宣威市| 牟定县| 田阳县| 云南省| 汉川市| 监利县| 信丰县| 绍兴县| 泰兴市| 乌兰察布市| 文水县| 共和县| 广河县| 婺源县| 西吉县| 瑞昌市| 班玛县| 太原市| 通城县| 延安市| 朔州市| 阳新县| 南充市| 曲松县| 邢台县| 廊坊市|