1. 程式人生 > >事務學習總結(2)——spring事務

事務學習總結(2)——spring事務

一、spring事務:

      spring針對事務的解決方案,在基礎的隔離性基礎上,又增加了事務傳播行為、只讀事務、事務超時的機制。

二、事務傳播:

      其實就是兩個事務傳播。

          1、方法A有事務、方法B沒有事務;

          2、方法A有事務、方法B有事務;

          3、方法A沒有事務、方法B有事務;

          4、方法A沒有事務、方法B沒有事務;

 

     對應的有7中方式,4種對應上面的,3種特殊的。比如方法A的事務,

  1. 如果沒有,就開啟一個事務;如果有,就加入當前事務(方法A加入到方法B)。這就是 PROPAGATION_REQUIRED,它也是 Spring 提供的預設事務傳播行為,適合絕大多數情況。
  2. 如果沒有,就開啟一個事務;如果有,就將當前事務掛起。這就是 RROPAGATION_REQUIRES_NEW,意思就是建立了一個新事務,它和原來的事務沒有任何關係了。
  3. 如果沒有,就開啟一個事務;如果有,就在當前事務中巢狀其他事務。這就是 PROPAGATION_NESTED
    ,也就是傳說中的“巢狀事務”了,所巢狀的子事務與主事務之間是有關聯的(當主事務提交或回滾,子事務也會提交或回滾)。
  4. 如果沒有,就以非事務方式執行;如果有,就使用當前事務。這就是 PROPAGATION_SUPPORTS,這種方式非常隨意,沒有就沒有,有就有,有點無所謂的態度,反正我是支援你的。
  5. 如果沒有,就以非事務方式執行;如果有,就將當前事務掛起。這就是 PROPAGATION_NOT_SUPPORTED,這種方式非常強硬,沒有就沒有,有我也不支援你,把你掛起來,不鳥你。
  6. 如果沒有,就以非事務方式執行;如果有,就丟擲異常。這就是 PROPAGATION_NEVER
    ,這種方式更猛,沒有就沒有,有了反而報錯,確實夠牛的,它說:我從不支援事務!
  7. 如果沒有,就丟擲異常;如果有,就使用當前事務。這就是 PROPAGATION_MANDATORY,這種方式可以說是牛逼中的牛逼了,沒有事務直接就報錯,確實夠狠的,它說:我必須要有事務!

三、spring事務其他特性:

    Spring 給我們帶來了事務傳播行為,這確實是一個非常強大而又實用的功能。除此以外,也提供了一些小的附加功能,比如:

  1. 事務超時(Transaction Timeout):為了解決事務時間太長,消耗太多的資源,所以故意給事務設定一個最大時常,如果超過了,就回滾事務。
  2. 只讀事務(Readonly Transaction):為了忽略那些不需要事務的方法,比如讀取資料,這樣可以有效地提高一些效能。

 

四:總結: