spring事务

spring事务_第1张图片

2.spring事务三大接口介绍

2.1PlatformTransactionManager(平台)事务管理器

spring并不直接管理事务,而是提供了很多事务管理器,将事务管理职责委托给hibernate或者JTA等持久化机制所提供的相关平台框架事务来实现。

spring事务管理器的接口是org.springframework.transaction.PlatformTransactionManager

通过这个接口,spring为各个平台如hibernate,jdbc等提供了对应的事务管理器,怎么实现是各个平台自己的事情了。

public interface PlatformTransactionManager extends TransactionManager {
    //获取事务状态
    TransactionStatus getTransaction(@Nullable TransactionDefinition var1) throws TransactionException;
	//事务提交
    void commit(TransactionStatus var1) throws TransactionException;
	//事务回滚
    void rollback(TransactionStatus var1) throws TransactionException;
}

 

2.2TransactionDefinition事务定义信息(事务传播行为,隔离级别,超时,只读,回滚原则)

public interface TransactionDefinition {
    //支持当前事务,若没有事务则创建一个事务
    int PROPAGATION_REQUIRED = 0;
    //如果存在当前事务,则加入事务,如果没有,则以非事务方式运行
    int PROPAGATION_SUPPORTS = 1;
     //如果存在当前事务,则加入事务,如果没有,则抛出异常
    int PROPAGATION_MANDATORY = 2;
    //创建一个新的事务,如果存在当前事务,则当前事务挂起
    int PROPAGATION_REQUIRES_NEW = 3;
    //以非事务方式运行,如果存在当前事务,则当前事务挂起
    int PROPAGATION_NOT_SUPPORTED = 4;
     //以非事务方式运行,如果存在当前事务,则抛出异常
    int PROPAGATION_NEVER = 5;
    /**表示如果当前有一个事务正在运行中,则该方法应用运行在一个嵌套的事务中
    *被嵌套的事务可以独立运行于封装的事务进行提交或者回滚(保存点)
    *如果封装事务不存在则 PROPAGATION_REQUIRES_NEW 
    **/
    int PROPAGATION_NESTED = 6;
    //使用后端数据库默认的隔离级别,oracle默认读已提交,mysql可重复度
    int ISOLATION_DEFAULT = -1;
    //最低的隔离级别,允许读取尚未提交的数据变更,可能会导致幻读、脏读或者不可重复读
    int ISOLATION_READ_UNCOMMITTED = 1;
    //允许读取并发事务已经提交的数据,避免脏读,但是不可避免幻读或者不可重复读
    int ISOLATION_READ_COMMITTED = 2;
    //对于多次读取同一条记录的结果是一致的,除非数据是被本身事务所修改,可以避免脏读和不可重复度,幻读可能发生
    int ISOLATION_REPEATABLE_READ = 4;
    //最高的隔离级别,完全服从ACID的隔离级别,所有的事务依次逐个执行,事务之间完全不可能产生干扰,避免脏读,幻读,不可重复度,但是性能最低
    int ISOLATION_SERIALIZABLE = 8;
    //使用默认的超时时间,事务进行时间大于设置时间就会抛异常,进行回滚
    int TIMEOUT_DEFAULT = -1;
	//获取事务的传播行为
    default int getPropagationBehavior() {
        return 0;
    }
	//获取事务的隔离级别
    default int getIsolationLevel() {
        return -1;
    }
	//获取事务的超时时间
    default int getTimeout() {
        return -1;
    }
	//获取事务的是否只读
    default boolean isReadOnly() {
        return false;
    }
	//获取事务的名称
    @Nullable
    default String getName() {
        return null;
    }

    static TransactionDefinition withDefaults() {
        return StaticTransactionDefinition.INSTANCE;
    }
}
final class StaticTransactionDefinition implements TransactionDefinition {
    static final StaticTransactionDefinition INSTANCE = new StaticTransactionDefinition();

    private StaticTransactionDefinition() {
    }
}

 

spring事务_第2张图片

2.3TransactionStatus:事务运行状态

用来记录事务的状态,该接口定义了一组方法,用来获取或者判断事务的状态信息。

PlatformTransactionManager. getTransaction(........)返回一个TransactionStatus对象,返回的TransactionStatus对象可能代表一个新的或者已经存在的事务

 

 

public interface TransactionStatus extends TransactionExecution, SavepointManager, Flushable {
    boolean hasSavepoint();

    void flush();
}

接口继承关系如下

属性

spring事务_第3张图片

 构造器spring事务_第4张图片

 所有方法

spring事务_第5张图片

 

 springboot注解spring事务_第6张图片

spring事务_第7张图片 实现红框中的两个接口可以将组件注入spring,BeanPostProcessor在bean调用构造器实例化之前之后,后者是初始化前后。实现AOP所具有的功能

 

spring事务_第8张图片

你可能感兴趣的:(spring,spring事务)