前提:有兩個service類 servicea和serviceb,在每個service中各有各的方法 methoda ,methodb。
(一)假如servicea.mehtoda設定成propagation_rqquired
a:當使用者呼叫servicea.methoda的時候,如果已經存在乙個事物了,那麼該方法就在這個事物當中執行,否則就會新建乙個事物a;
b:假如serveib.methodb設定成propagation_requirs_new
當serviea.methoda 呼叫serviceb.mehtodb 的時候,事物a會被掛起,methodb 會新建乙個事物b ,事物a和事物b沒有必然的關係,即事物b的提交和回滾,不影響事物a的提交和回滾,相反事物a的提交和回滾,也不會影響事物b的提交和回滾;
c:假如serviceb.methodb 設定成propagation_supports
當servicea.methoda呼叫serviceb.mehtodb 的時候,methodb就在事物a中執行;如果換成乙個非事物的方法呼叫serviceb.methodb,那麼methodb就以乙個非事物的方式進行執行,也就是說這中情況下的,methodb依賴與父方法執行方式執行;
d:假如serviceb.methodb 設定成propagation_not_supported
methodb 以非事物的方式進行執行,是單獨存在的,不依賴於任何存在,如果父方法有事物則掛起,等待methodb執行完畢後,在喚醒
e:假如serviceb.methodb設定成propagation_mandatory
在這種情況下,serviceb.methodb 必須處於乙個事物中,否則會丟擲異常資訊
f:假如serviceb.methodb設定成propagation_never
在這種情況下,serviceb.methodb 不能處於乙個事物中,否則會丟擲異常資訊
Spring事物傳播行為和隔離級別
b spring的事務隔離級別 isolation default 使用資料庫預設的隔離級別。isolation read uncommitted 允許讀取改變了的還未提交的資料,可能導致髒讀 不可重複讀和幻讀。isolation read committed 允許併發事務提交之後讀取,可以避免髒讀...
Spring 事物的隔離級別與傳播行為
注 1 事務的隔離級別和資料庫併發性是成反比的,隔離級別越高,併發性越低。2 對於不同的資料庫,支援的隔離級別也不一樣 oracle只能支援讀寫提交和序列化,而mysql能夠支援4種,對於oracle預設的隔離級別為讀寫提交,mysql則是可重複讀。3 註解 transactional的底層實現是s...
Spring事物特性 隔離級別和傳播行為
原子性 atomicity 強調事務的不可分割.一致性 consistency 事務的執行的前後資料的完整性保持一致.隔離性 isolation 乙個事務執行的過程中,不應該受到其他事務的干擾 永續性 durability 事務一旦結束,資料就持久到資料庫 髒讀 a事物讀取到b事物未提交的資料,b事...