SpringBoot中添加事务

今天项目中需要使用到事务,所以在这里将SpringBoot的事务实现方式学习一下

SpringBoot中使用事务会使用到@Transactional这个注解来实现

  先来对Transactional注解有个大致了解

  1.其上注解

@Target({ElementType.METHOD, ElementType.TYPE})//METHOD:用于描述方法,TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Retention(RetentionPolicy.RUNTIME)//注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
@Inherited//阐述了某个被标注的类型是被继承的
@Documented//表明这个注解应该被 javadoc工具记录

  2.属性 

    2.1 rollbackFor(这就是我今天使用到的属性)

      指定哪些异常需要进行事务回滚,这里可以设置异常数组,通常为RuntimeException.class、Exception.class

    2.2 value和2.3 transactionManager(因为使用了AliasFor注解,value和transactionManager互为别名)

      这两个放在一起讲,如果我们没有指定,默认为上下文中声明的名称为“transactionManager”,pringboot会自动配置一个 DataSourceTransactionManager

    2.4 propagation 默认为Propagation.REQUIRED

      用于设置事务的传播行为,业务方法需要在一个事务中运行,如果方法运行时,已处在一个事务中,那么就加入该事务,否则自己创建一个新的事务.这是spring默认的传播行为

    2.5 isolation 默认为  Isolation.DEFAULT

      用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置

    2.6 timeout 默认为-1,表示永不超时

      用于设置事务的超时秒数

    2.7 readOnly 默认为false 

      设置当前事务是否为只读事务

    2.8 rollbackForClassName (这个和rollbackFor最大的区别就是一个是指定异常类,一个是指定异常类名)

    2.9 noRollbackFor(这个应该就是忽略哪些异常)

    2.10 noRollbackForClassName(这个我觉得不需要我详细说明了)

  3.实际使用(这算是手动回滚使用)

    1.首先在我们需要使用事务的Service层的方法上添加@Transactional注解

    2.rollbackFor配置我们需要捕获的哪些异常来进行事务回滚

    3.其他参数按照自己实际需求来添加

    4.方法中捕获这个异常,然后调用

      TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

注意:

  1.@Transactional注解必须应用到public方法上才有效

猜你喜欢

转载自www.cnblogs.com/kongkongFabian/p/9610938.html