Spring事务

基本使用

Posted by YD Blog on October 30, 2022

Spring事务

简介

  • 事务作用:在数据层保障一系列的数据库操作同成功同失败
  • Spring事务的作用:在数据层或业务层保障一系列的数据库操作同成功同失败

用法

  • 首先创建Spring事务管理器对象,在druid配置类中创建方法如下:、
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);

        return transactionManager;
    }
  • 在Spring的配置类中添加@EnableTransactionManagement注解,表示启用事务管理器

  • 在需要开启事务管理的方法或接口上添加@Transactional注解,表示开启事务

Spring事务角色

分为事务管理员和事务协调员

  • 事务管理员:发起事务方,在Spring中通常代指业务层开启事务的方法
  • 事务协调员:加入事务方,在Spring中通常代指数据层方法,也就是业务层方法

Spring事务属性

属性 作用 示例
readOnly 设置是否为只读事务 readOnly=true 只读事务
timeout 设置事务超时时间 timeout=-1(永不超时)
rollbackFor 设置事务回滚异常(class) rollbackFor={NullPoinException.class}
rollbackForClassName 设置事务回滚异常(String) 同上格式为字符串
noRollbackFor 设置事务不回滚异常(class) noRollbackFor={NullPoinException.class}
noRollbackForClassName 设置事务不回滚异常(String) 同上格式为字符串
propagation 设置事务传播行为

设置属性的方法为:在需要设置的方法或接口的@Transactional注解中设置属性。

@Transactional(timeout=-1,readOnly=truw)

另外,之所以需要设置事务回滚异常,是由于Spring事务在遇到error系异常和运行时异常时是不会进行默认回滚的,故有时候需要手动设置。

  • 事务传播行为:事务协调员对事物管理员所携带的事物的处理态度

以下为设置propagation属性的值以及对应的事务管理员状态和协调员行为。

传播属性 事务管理员 事务协调员
REQUIRED(默认) 开启T 加入T
  新建T2
REQUIRES_NEW 开启T 新建T2
  新建T2
SUPPORTS 开启T 加入T
 
NOT_SUPPORTED 开启T
 
MANDATORY 开启T 加入T
  ERROR
NEVER 开启T ERROR
 
NESTED 设置savepoint,一旦事务回滚,事务将回滚到savepoint处交由客户相应提交