1.傳播行為
定義了關于客戶端和被調用方法的事務邊界。傳播規則就是在說明新的事務是否要被啟動或是掛起,或者方法是否要在事務環境中運行。
spring定義了7種不同的傳播行為。
1)
PROPAGATION_MANDATORY
表明方法必須要在事務中運行。如果事務不存在,拋出異常
2)
PROPAGATION_NESTED
表示如果當前已經存在一個事務,則該方法應當運行在一個嵌套的事務中。被嵌套的事務可以從當前事務中單獨地提交或回滾。如果當前事務不存在,就相當于PROPAGATION_REQUIRED
3)
PROPAGATION_NEVER 表示當前的方法不應該運行在一個事務上下文中。如果當前存在一個事務,則會拋出一個異常。
4)
PROPAGATION_NOT_SUPPORTED
表示該方法不應該在事務中運行。如果一個現有的事務正在運行中。它將在該方法的運行期間被掛起
5)
PROPAGATION_REQUIRED
表示當前方法必須運行在一個事務中。如果一個現有的事務正在運行中,該方法將運行在這個事務中。否則的話,就要開始一個新的事務。
6)
PROPAGATION_REQUIRES_NEW
表示當前方法必須運行在它自己的事務中。如果一個現有事務在運行的話,將在這個方法運行期間被掛起。
7)
PROPAGATION_SUPPORTS表示當前方法不需要事務處理環境,但如果有一個事務已經在運行的話,這個方法也可以在這個事務中運行
2.隔離級別
多個事務并發運行的關系。因為并發會導致以下問題
.臟讀(Dirty read) 一個事務讀取了被另一個事務改寫但還沒提交的數據。
.不可重復讀(Nonrepeatable read) 一個事務執行相同的查詢兩次或兩次以上,但每次查詢結果都不同時。這由于另一個并發事務在兩次查詢之間更新了數據
.幻讀(Phantom read)
當一個事務讀取幾行記錄后,另一個并發事務插入一些記錄,就發生了幻讀
spring定義了以下5種隔離關系
1)
ISOLATION_DEFAULT使用后端數據庫默認得隔離級別
2)
ISOLATION_READ_UNCOMMITTED
允許你讀取還未提交的改變了的數據。可能導致臟讀,不可重復讀,幻讀
3)
ISOLATION_READ_COMMITTTED
運行在并發事務已經提價后讀取。可防止臟讀,但不可重復讀,幻讀都有可能發生
4)
ISOLATION_REPEATABLE_READ
對相同字段的多次讀取結果是一致的,除非數據被事務本身。可防止臟讀,不可重復讀,但幻讀仍可能發生。
5)
ISOLATION_SERIALIZABLE
完全服從ACID的隔離級別,確保不發生臟讀,不可重復讀,幻讀。它的典型做法就是完全鎖定在事務中涉及的數據表。因此它是最慢地。
3.只讀提示
通過只讀屬性,數據庫可以對事務進行優化。
4.事務超時時間
設置了的話,事務在超過這個時間后就自動回滾。避免占用資源過久。
posted on 2006-11-17 10:22
周銳 閱讀(237)
評論(0) 編輯 收藏 所屬分類:
Spring