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