sprng 事物與傳播行為

2021-09-25 04:18:12 字數 2347 閱讀 4351

原子性是指:事務包含的所有操作要麼全部成功,要麼全部失敗回滾,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響,偽**如下:。

/**

* 偽**

**/@transactional

public void add() catch (exception e)

}

一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態。

例如轉賬,假設張三和李四兩者的錢加起來一共是10000,那麼不管張三和李四之間不管如何轉賬,轉幾次賬,,事務結束後(只要事物成功提交,或者事物失敗回滾)兩個使用者賬戶餘額相加起來應該還得是10000,這就是事務的一致性。

隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。

即要達到這麼一種效果:對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。

關於事務的隔離性資料庫提供了多種隔離級別如下:

(1)read uncommited:是最低的事務隔離級別,它允許另外乙個事務可以看到這個事務未提交的資料。

(2)read commited:保證乙個事物提交後才能被另外乙個事務讀取。另外乙個事務不能讀取該事物未提交的資料。

(3)repeatable read:這種事務隔離級別可以防止髒讀,不可重複讀。但是可能會出現幻象讀。它除了保證乙個事務不能被另外乙個事務讀取未提交的資料之外還避免了以下情況產生(不可重複讀)。

(4)serializable:這是花費最高代價但最可靠的事務隔離級別。事務被處理為順序執行。除了防止髒讀,不可重複讀之外,還避免了幻象讀

(5)髒讀、不可重複讀、幻象讀概念說明:

永續性表示在某個事務的執行過程中,對資料所作的所有改動都必須在事務成功結束前儲存至某種物理儲存裝置。這樣可以保證,所作的修改在任何系統癱瘓時不至於丟失。

1、程式設計式事務 需要手動在**中呼叫begintransaction()、commit()、rollback()等事務進行管理。

//開啟乙個事務

transactionstatus transaction = datasourcetransactionmanager.gettransaction(new defaulttransactiondefinition());

//提交事務

void commit(transactionstatus status);

//回滾事務

void rollback(transactionstatus status);

2、基於 transactionproxyfactorybean的宣告式事務管理

public class userdaoimpl implements userdao 

public void install(user user)

}

propagation_required

3、基於註解 @transactional 的宣告事務管理

4、基於aspectj aop配置事務

事物是程式執行如果沒有錯誤,會自動提交事物,如果程式執行發生異常,則會自動回滾。 

如果使用了try捕獲異常時.一定要在catch裡面手動回滾。

事物手動回滾**:

transactionaspectsupport.currenttransactionstatus().setrollbackonly();
事務傳播行為型別

說明是否在同乙個事務中

propagation_required

支援當前事務,如果不存在 就新建乙個(預設) 

是propagation_supports

支援當前事務,如果不存在,就不使用事務 

是propagation_mandatory

支援當前事務,如果不存在,就丟擲異常。 

是propagation_requires_new

如果有事務存在,掛起當前事務,建立乙個新的事務。

否 propagation_not_supported

以非事務方式執行操作,如果當前存在事務,就把當前事務掛起

否 propagation_never

則丟擲異常

否 propagation_nested

如果當前事務存在,則巢狀事務執行

否 

spring事物傳播行為

propagation required 如果當前沒有事務,就新建乙個事務,如果已經存在乙個事務中,加入到這個事務中。這是最常見的選擇。propagation supports 支援當前事務,如果當前沒有事務,就以非事務方式執行。propagation mandatory 使用當前的事務,如果當前沒...

Spring的事物傳播行為

以下討論基於a.methoda 呼叫b.methodb 若b的事務隔離級別為 propagation required 外面影響裡面,裡面不影響外面 若a的方法沒有事務,則建立乙個新事務,若有事務,則加入當前事務。如果a的方法a丟擲異常,則a,b的方法都會回滾,如果b的方法b丟擲異常,則看a有沒有捕...

Spring事物的傳播行為

在service類前加上 transactional,宣告這個service所有方法需要事務管理。每乙個業務方法開始時都會開啟乙個事務。spring預設情況下會對執行期例外 runtimeexception 進行事務回滾。這個例外是unchecked 如果遇到checked意外就不回滾。如何改變預設...