事務傳播#
事務傳播的幾種情況#
序號 | 事務的傳播機制 | 說明 | 備註 |
---|---|---|---|
1 | required | 如果當前存在事務,就加入該事務。 如果當前沒有事務,就創建一個新事務。 這是最常用的設置。 | 只創建一個事務。 |
2 | requires_new | 不管是否存在事務,都創建一個新的、自己的事務。舊事務先掛起,再創建新事務,新事務 執行完並提交,接著,繼續執行 舊事務最後提交。 | 1、每次都創建一個新的事務。 2、創建 新事務 前,舊事務 先掛起。 3、先執行的方法後提交事務,後執行的方法先提交事務。 4、舊事務 的回滾,不會影響 新事務 的提交。 |
3 | nested | 如果當前存在事務,則 嵌套事務與外面事務使用同一事務,不同的是 嵌套內部開啟一個新的保存點( savepoint ),執行有兩種情況: (1)當嵌套內部 發生回滾,不影響外面事務的正常提交。 (2)當外面事務 發生回滾,則嵌套內的事務要回滾。 (3)未發生異常時,則嵌套內的事務和外部事務一起,一個整體提交。如果當前沒有事務,則執行與 required 類似的操作。 | 皮尚在,毛被燒掉。 皮之不存,毛將焉附。 |
4 | supports | 支持當前事務。 如果當前存在事務,就加入該事務, 如果當前不存在事務,就以非事務執行。 | supports 不會創建事務。 |
5 | not_supported | 不支持事務。 如果當前存在事務,就把當前事務 掛起。 如果當前沒有事務,就以非事務執行。 | |
6 | mandatory | 強制、必須使用事務。 如果當前 已經存在事務,就加入該事務, 如果當前不存在事務,就 拋出異常。 | 1、mandatory 不會創建事務。 2、mandatory 執行的前提是已經存在事務。 |
7 | never | 禁止事務 。 如果當前存在事務,則 拋出異常, 如果當前沒有事務,以非事務方式執行, | 必須在一個沒有事務中執行,否則報錯。 |
事務傳播的幾種情況理解#
行為 | 類型 |
---|---|
有就加入,沒有就算了 | supports |
外面有沒有都要是新事務 | requires_new |
外面有就加入,沒有就新事務 | required |
外面有就加入,保存點加入,沒有就新事物 | nested |
不要事務,外面有先掛起 | not_supported |
要求外面有事務(不滿足異常) | mandatory |
要求外面沒有事務(不滿足異常) | mandatory |
線程綁定(同步管理)#
此文由 Mix Space 同步更新至 xLog
原始鏈接為 https://me.liuyaowen.club/posts/default/Spring