1. 程式人生 > >Spring事務隔離 && 事務傳播

Spring事務隔離 && 事務傳播

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

 

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

 

 

ISOLATION_DEFAULT:使用資料庫預設的隔離級別

事務隔離級別: Spring事務隔離  事務傳播 - DaySpring - DaySpring 加鎖讀 serializable, mysql預設可重複讀   ISOLATION_DEFAULT:使用資料庫預設的隔離級別 事務併發處理: 
  • 共享鎖:共享鎖用於讀取資料操作,它允許其他事務同時讀取某鎖定的資源,但不允許其他事務更新它。 
  • 排他鎖:排它鎖用於修改資料的場合。它鎖定的資源,其他事務不能讀取也不能修改。 
  • 更新鎖:更新鎖在更新操作的初始化階段用來鎖定可能要被修改的資源,從而避免使用共享鎖造成的死鎖現象。 
事務傳播:
  • 1、required  如果當前沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中。
  • 2、mandatory 使用當前的事務,如果當前沒有事務,就丟擲異常。
  • 3、requiresnew  新建事務,如果當前存在事務,把當前事務掛起。
  • 4、supports  支援當前事務,如果當前沒有事務,就以非事務方式執行。
  • 5、not_supported  以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
  • 6、Never  以非事務方式執行,如果當前存在事務,則丟擲異常。
  • 7、Nested:如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則進行與required類似的操作。
  程式設計式(當你只有很少的事務操作時,程式設計式事務管理通常比較合適。) 宣告式(如果你的應用中存在大量事務操作,那麼宣告式事務管理通常是值得的。它將事務管理與業務邏輯分離,而且在Spring中配置也不難。)