Spring事务问题

Spring事务隔离级别

  与数据库隔离级别一致,默认隔离级别与连接的数据库隔离级别相同

 

Spring事务的两种实现方式

  • 编程式事务

    编程式事务是侵入性事务管理,使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。

  • 声明式事务(@Transactional

    建立在AOP之上,其本质是对方法前后进行拦截,在目标方法开始之前创建或加入一个事务,在执行完成目标方法后根据执行情况提交或回滚事务。

    声明式事务使用:第一步,开启支持@EnableTransactionManagement;第二步,在需要事务管理的服务层添加@Transactional。

    注意:

      • @Transactional只能用在public方法上。
      • @Transactional标注的方法如果时非运行时异常,则不会回滚。
      • 如果我们往上抛Exception异常(非运行时异常),我们可以指定rollbackFor属性来回滚。

 

@Transactional常用参数

  • propagation:事务传播行为

    • REQUIRED,Spring的默认传播行为,若当前存在事务,则加入当前事务;若当前不存在事务,则创建一个新事物。
    • REQUIRES_NEW,创建一个新事务,若当前存在事务,则把当前事务挂起。
    • SUPPORTS,若存在当前事务,则加入当前事务;若当前不存在事务,则以非事务的方式继续运行。
    • NOT_SUPPORTS,以非事务的方式运行,若当前存在事务,则把当前事务挂起。
    • NEVER,以非事务的方式运行,若当前存在事务,则抛出异常。
    • MANDATORY,若存在当前事务,则加入当前事务;若当前不存在事务,则抛出异常。
    • NESTED,若存在当前事务,则创建一个事务作为当前事务的嵌套事务运行;若当前不存在事务,则相当于REQUIRED传播。
  • isolation:事务隔离级别

    • 与数据库隔离级别划分方式相同,默认DEFAULT采用数据库的隔离级别。
  • timeout:事务超时时间,默认-1

    • 设置超时时间,若超时,则回滚。默认-1,表示不超时。
  • read-only:是否只读,默认false

  • rollbackFor:指定能触发事务回滚的异常类型

  • noRollbackFor:指定不需要事务回滚的异常类型

 

posted @   夏笠  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示