Spring事務隔離 && 事務傳播

事務的四個屬性:
1:原子性(Atomic)
  • 最重要的原則,也是最容易理解的原則。被事務管理的全部方法,要麼一塊兒被提交,要麼一塊兒回滾。
2:一致性( Consistency)
  • 事務在系統完整性中實施一致性,若是事務成功地完成,那麼系統中全部變化將正確地應用,系統處於新有效狀態。若是在事務中出現錯誤,那麼系統中的全部變化將自動地回滾,系統返回到原始狀態。
3:隔離性(Isolation)
  • 在處理一個事務的時候,若是有一個事務同時處理,必須等待這個事務處理完畢,才能進行下一次處理。
4:持久性( Durability)
  • 持久性意味着一旦事務執行成功,在系統中產生的全部變化將是永久的。應該存在一些檢查點防止在系統失敗時丟失信息。甚至硬件自己失敗,系統的狀態仍能經過在日誌中記錄事務完成的任務進行重建。舉例:在執行事務的時候,忽然停電,等再來電的時候,有個事務記錄通知從新執行下這個事務 。
併發問題:

 

  • 髒讀:(一個事務讀取了未提交的事務)指當一個事務正在訪問數據,而且對數據進行了修改,而這種修改尚未提交到數據庫中,這時,另一個事務也訪問這個數據,而後使用了這個數據。
  • 不可重複讀:(同一個事務中屢次讀取同一個數據返回的結果不一樣 )指在一個事務內,屢次讀同一數據。在這個事務尚未結束時,另一個事務也訪問該同一數據。那麼,在第一個事務中的兩次讀數據之間,因爲第二個事務的修改,那麼第一個事務兩次讀到的的數據多是不同的。
  • 幻覺讀:(一個事務讀取到了另外一個事務已提交的insert數據)指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的數據進行了修改,這種修改涉及到表中的所有數據行。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那麼,之後就會發生操做第一個事務的用戶發現表中還有沒有修改的數據行,就好象發生了幻覺同樣。

 

 

ISOLATION_DEFAULT:使用數據庫默認的隔離級別mysql

事務隔離級別:
Spring事務隔離  事務傳播 - DaySpring - DaySpring
加鎖讀 serializable, mysql默承認重複讀
 
ISOLATION_DEFAULT:使用數據庫默認的隔離級別
事務併發處理: 
  • 共享鎖:共享鎖用於讀取數據操做,它容許其餘事務同時讀取某鎖定的資源,但不容許其餘事務更新它。 
  • 排他鎖:排它鎖用於修改數據的場合。它鎖定的資源,其餘事務不能讀取也不能修改。 
  • 更新鎖:更新鎖在更新操做的初始化階段用來鎖定可能要被修改的資源,從而避免使用共享鎖形成的死鎖現象。 
事務傳播:
  • 一、required  若是當前沒有事務,就新建一個事務,若是已經存在一個事務中,加入到這個事務中。
  • 二、mandatory 使用當前的事務,若是當前沒有事務,就拋出異常。
  • 三、requiresnew  新建事務,若是當前存在事務,把當前事務掛起。
  • 四、supports  支持當前事務,若是當前沒有事務,就以非事務方式執行。
  • 五、not_supported  以非事務方式執行操做,若是當前存在事務,就把當前事務掛起。
  • 六、Never  以非事務方式執行,若是當前存在事務,則拋出異常。
  • 七、Nested:若是當前存在事務,則在嵌套事務內執行。若是當前沒有事務,則進行與required相似的操做。
 
編程式(當你只有不多的事務操做時,編程式事務管理一般比較合適。)
聲明式(若是你的應用中存在大量事務操做,那麼聲明式事務管理一般是值得的。它將事務管理與業務邏輯分離,並且在Spring中配置也不難。)
相關文章
相關標籤/搜索