spring事務三個頂層介面
阿新 • • 發佈:2020-11-16
目錄
三個重要介面
PlatformTransactionManager
Spring並不直接管理事務,而是提供了多種事務管理器 ,他們將事務管理的職責委託給Hibernate或者JTA等持久化機制所提供的相關平臺框架的事務來實現。 Spring事務管理器的介面是: org.springframework.transaction.PlatformTransactionManager ,通過這個介面,Spring為各個平臺如JDBC、Hibernate等都提供了對應的事務管理器,但是具體的實現就是各個平臺自己的事情了。
PlatformTransactionManager介面中定義了三個方法:
Public interface PlatformTransactionManager()...{ // Return a currently active transaction or create a new one, according to the specified propagation behavior(根據指定的傳播行為,返回當前活動的事務或建立一個新事務。) TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; // Commit the given transaction, with regard to its status(使用事務目前的狀態提交事務) Void commit(TransactionStatus status) throws TransactionException; // Perform a rollback of the given transaction(對執行的事務進行回滾) Void rollback(TransactionStatus status) throws TransactionException; }
Spring中PlatformTransactionManager根據不同持久層框架所對應的介面實現類,幾個比較常見的如下圖所示
事務管理器介面 PlatformTransactionManager 通過 getTransaction(TransactionDefinition definition) 方法來得到一個事務,這個方法裡面的引數是 TransactionDefinition類 ,這個類就定義了一些基本的事務屬性。
TransactionDefinition
TransactionDefinition介面中定義了5個方法以及一些表示事務屬性的常量比如隔離級別、傳播行為等等的常量。
public interface TransactionDefinition {
// 返回事務的傳播行為
int getPropagationBehavior();
// 返回事務的隔離級別,事務管理器根據它來控制另外一個事務可以看到本事務內的哪些資料
int getIsolationLevel();
// 返回事務必須在多少秒內完成
//返回事務的名字
String getName();
int getTimeout();
// 返回是否優化為只讀事務。
boolean isReadOnly();
}
TransactionDefinition是一個介面,比較常見的實現類有DefaultTransactionDefinition
它的配置如下:
private int propagationBehavior = PROPAGATION_REQUIRED;
private int isolationLevel = ISOLATION_DEFAULT;
private int timeout = TIMEOUT_DEFAULT;
private boolean readOnly = false;
TransactionStatus
public interface TransactionStatus{
boolean isNewTransaction(); // 是否是新的事物
boolean hasSavepoint(); // 是否有恢復點
void setRollbackOnly(); // 設定為只回滾
boolean isRollbackOnly(); // 是否為只回滾
boolean isCompleted; // 是否已完成
}
TransactionStatus用於儲存當前事物狀態,比如是否只能回滾、是否包含回滾點、是否只讀,其實現類內部包含事物操作物件transaction