事務學習總結(2)——spring事務
阿新 • • 發佈:2018-11-10
一、spring事務:
spring針對事務的解決方案,在基礎的隔離性基礎上,又增加了事務傳播行為、只讀事務、事務超時的機制。
二、事務傳播:
其實就是兩個事務傳播。
1、方法A有事務、方法B沒有事務;
2、方法A有事務、方法B有事務;
3、方法A沒有事務、方法B有事務;
4、方法A沒有事務、方法B沒有事務;
對應的有7中方式,4種對應上面的,3種特殊的。比如方法A的事務,
- 如果沒有,就開啟一個事務;如果有,就加入當前事務(方法A加入到方法B)。這就是 PROPAGATION_REQUIRED,它也是 Spring 提供的預設事務傳播行為,適合絕大多數情況。
- 如果沒有,就開啟一個事務;如果有,就將當前事務掛起。這就是 RROPAGATION_REQUIRES_NEW,意思就是建立了一個新事務,它和原來的事務沒有任何關係了。
- 如果沒有,就開啟一個事務;如果有,就在當前事務中巢狀其他事務。這就是 PROPAGATION_NESTED
- 如果沒有,就以非事務方式執行;如果有,就使用當前事務。這就是 PROPAGATION_SUPPORTS,這種方式非常隨意,沒有就沒有,有就有,有點無所謂的態度,反正我是支援你的。
- 如果沒有,就以非事務方式執行;如果有,就將當前事務掛起。這就是 PROPAGATION_NOT_SUPPORTED,這種方式非常強硬,沒有就沒有,有我也不支援你,把你掛起來,不鳥你。
- 如果沒有,就以非事務方式執行;如果有,就丟擲異常。這就是 PROPAGATION_NEVER
- 如果沒有,就丟擲異常;如果有,就使用當前事務。這就是 PROPAGATION_MANDATORY,這種方式可以說是牛逼中的牛逼了,沒有事務直接就報錯,確實夠狠的,它說:我必須要有事務!
三、spring事務其他特性:
Spring 給我們帶來了事務傳播行為,這確實是一個非常強大而又實用的功能。除此以外,也提供了一些小的附加功能,比如:
- 事務超時(Transaction Timeout):為了解決事務時間太長,消耗太多的資源,所以故意給事務設定一個最大時常,如果超過了,就回滾事務。
- 只讀事務(Readonly Transaction):為了忽略那些不需要事務的方法,比如讀取資料,這樣可以有效地提高一些效能。
四:總結: