SpringBoot中添加事务

Posted 终会飞翔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();

注意:

  [email protected]注解必须应用到public方法上才有效

以上是关于SpringBoot中添加事务的主要内容,如果未能解决你的问题,请参考以下文章

Android从后台堆栈中删除事务

SpringBoot中添加事务

Android中的片段事务问题

如何正确地将多个片段添加到片段过渡?

springboot中添加事务注解

理解片段事务期间片段的生命周期方法调用