spring事務簡單筆記
Spring的特色之一,簡單而強大的事務管理功能,包括程式設計式事務和宣告式事務。
1. Spring中涉及到事務管理的API有100多個,核心的只有三個: TransactionDefinition、PlatformTransactionManager、TransactionStatus。所謂事務管理,其實就是“按照給定的事務規則來執行提交或者回滾操作”。“給定的事務規則”就是用 TransactionDefinition 表示的,“按照……來執行提交或者回滾操作”便是用 PlatformTransactionManager 來表示,而 TransactionStatus 用於表示一個執行著的事務的狀態。
2. TransactionDefinition, 該介面在前面已經介紹過,它用於定義一個事務。它包含了事務的靜態屬性,比如:事務傳播行為、超時時間等等。Spring 為我們提供了一個預設的實現類:DefaultTransactionDefinition,該類適用於大多數情況。如果該類不能滿足需求,可以通過實現 TransactionDefinition 介面來實現自己的事務定義。
3. PlatformTransactionManager 用於執行具體的事務操作。
Public interface PlatformTransactionManager{
TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
void commit(TransactionStatus status)throws TransactionException;
void rollback(TransactionStatus status)throws TransactionException;
}
根據底層所使用的不同的持久化 API 或框架,PlatformTransactionManager 的主要實現類大致如下:
DataSourceTransactionManager :適用於使用JDBC和iBatis進行資料持久化操作的情況。
HibernateTransactionManager :適用於使用Hibernate進行資料持久化操作的情況。
JpaTransactionManager :適用於使用JPA進行資料持久化操作的情況。
另外還有JtaTransactionManager 、JdoTransactionManager、JmsTransactionManager等等。
4. 程式設計式事務需要你在程式碼中直接加入處理事務的邏輯,可能需要在程式碼中顯式呼叫beginTransaction()、commit()、rollback()等事務管理相關的方法,如在執行a方法時候需要事務處理,你需要在a方法開始時候開啟事務,處理完後。在方法結束時候,關閉事務. 宣告式的事務的做法是在a方法外圍添加註解或者直接在配置檔案中定義,a方法需要事務處理,在spring中會通過配置檔案在a方法前後攔截,並新增事務. 二者區別.程式設計式事務侵入性比較強,但處理粒度更細. 相當於一個是手動事務,另一個是系統自動事務。 程式設計試事務就是需要手工寫程式碼提交事務,回滾事務等。 宣告性事務就是在配置檔案裡面定義一下什麼時候需要事務,到時候系統會自動commit,出異常了自動rollback,不需要在程式碼裡面寫commit或者rollback。