Spring事务可简单的理解为由PlatformTransactionManager,  TransactionDefinition,  TransactionStatus  构成
PlatformTransactionManager
其中 org.springframework.transaction.PlatformTransactionManager 接口定义如下:
public interface PlatformTransactionManager extends TransactionManager {
    // 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并不直接管理事务,它只提供接口抽象,事务管理器的具体实现由持久化框架自己实现,例如:DataSourceTransactionManager (JDBC / MyBatis),
JpaTransactionManager,  HibernateTransactionManager,  JtaTransactionManager,  KafkaTransactionManager,  RedissonTransactionManager
TransactionDefinition
Spring定义了事务管理的五大属性:隔离级别、传播行为、是否只读、事务超时、回滚规则
除回滚规则之外,其他属性都可以通过TransactionDefinition接口获得。
其中org.springframework.transaction.TransactionDefinition 接口定义如下:
public interface TransactionDefinition {
    // 返回事务的传播行为
    int getPropagationBehavior(); 
    // 返回事务的隔离级别,事务管理器根据它来控制另外一个事务可以看到本事务内的哪些数据
    int getIsolationLevel(); 
    //返回事务的名字
    String getName();
    // 返回事务必须在多少秒内完成
    int getTimeout();  
    // 返回是否优化为只读事务。
    boolean isReadOnly();
} 
TransactionStatus
只有hasSavepoint方法不是继承的。
其中 org.springframework.transaction.TransactionStatus  接口定义如下:
public interface TransactionStatus extends TransactionExecution, SavepointManager, Flushable {
    boolean isNewTransaction(); // 是否是新的事物
    boolean hasSavepoint(); // 是否有恢复点
    void setRollbackOnly();  // 设置为只回滚
    boolean isRollbackOnly(); // 是否为只回滚
    boolean isCompleted; // 是否已完成
}
 
           
          
评论