SPRING事務的屬性有哪些?其中,事務隔離級別有哪幾種?什麼情況需要使用這幾種事務隔離級別?

Sprin聲明式事務,propagation屬性列表 


PROPAGATION_REQUIRED:支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。 
PROPAGATION_SUPPORTS:支持當前事務,如果當前沒有事務,就以非事務方式執行。 
PROPAGATION_MANDATORY:支持當前事務,如果當前沒有事務,就拋出異常。 
PROPAGATION_REQUIRES_NEW:新建事務,如果當前存在事務,把當前事務掛起。 
PROPAGATION_NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。 
PROPAGATION_NEVER:以非事務方式執行,如果當前存在事務,則拋出異常。 
PROPAGATION_NESTED:支持當前事務,如果當前事務存在,則執行一個嵌套事務(還不是太明白),如果當前沒有事務,就新建一個事務。 

1 ISOLATION_DEFAULT 默認的隔離級別 
下面幾個都是 JDBC isolation levels 一一對應: 
2 ISOLATION_READ_UNCOMMITTED Connection.TRANSACTION_READ_UNCOMMITTED
指示防止發生髒讀的常量;不可重複讀和虛讀有可能發生。 
3 ISOLATION_READ_COMMITTED Connection.TRANSACTION_READ_COMMITTED 
指示可以發生髒讀 (dirty read)、不可重複讀和虛讀 (phantom read) 的常量。 
4 ISOLATION_REPEATABLE_READ Connection.TRANSACTION_REPEATABLE_READ 
指示防止發生髒讀和不可重複讀的常量;虛讀有可能發生。 
5 ISOLATION_SERIALIZABLE Connection.TRANSACTION_SERIALIZABLE 
指示防止發生髒讀、不可重複讀和虛讀的常量。 

髒讀 dirty reads:當事務讀取還未被提交的數據時,就會發生這種事件。舉例來說:Transaction 1 修改了一行數據,然後 Transaction 2 在 Transaction 1 還未提交修改操作之前讀取了被修改的行。如果 Transaction 1 回滾了修改操作,那麼 Transaction 2 讀取的數據就可以看作是從未存在過的。 
不可重複的讀 non-repeatable reads:當事務兩次讀取同一行數據,但每次得到的數據都不一樣時,就會發生這種事件。舉例來說:Transaction 1 讀取一行數據,然後 Transaction 2 修改或刪除該行並提交修改操作。當 Transaction 1 試圖重新讀取該行時,它就會得到不同的數據值(如果該行被更新)或發現該行不再存在(如果該行被刪除)。 
虛讀 phantom read:如果符合搜索條件的一行數據在後面的讀取操作中出現,但該行數據卻不屬於最初的數據,就會發生這種事件。舉例來說:Transaction 1 讀取滿足某種搜索條件的一些行,然後 Transaction 2 插入了符合 Transaction 1 的搜索條件的一個新行。如果 Transaction 1 重新執行產生原來那些行的查詢,就會得到不同的行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章