Spring事务的传播机制使用及说明
spring事务的传播机制
1、spring事务
指封装在数据库事务之上的一种事务处理机制。其管理方法有两种,分别是编程式事务以及声明式事务。
一般我们使用@Transactional进行声明式事务。
2、Spring事务的传播机制
事务的传播,是指一个方法调用另一个方法并将事务传递给它。
事务的转播机制主要针对被调用者而言,控制它是否被传播或者被怎样传播。
spring事务的传播机制有七种
| 传播行为 | 描述 |
| PROPAGATION_REQUIRED | 默认的Spring事物传播级别,若当前存在事务,则加入该事务,若不存在事务,则新建一个事务 |
| PROPAGATION_REQUIRE_NEW | 若当前没有事务,则新建一个事务。若当前存在事务,则新建 一个事务,新老事务相互独立。外部事务抛出异常回滚不会影响内部事务的正常提交 |
| PROPAGATION_NESTED | 如果当前存在事务,则嵌套在当前事务中执行。如果当前没有事务, 则新建一个事务,类似于REQUIRE_NEW |
| PROPAGATION_SUPPORTS | 支持当前事务,若当前不存在事务,以非事务的方式执行 |
| PROPAGATION_NOT_SUPPORTED | 以非事务的方式执行,若当前存在事务,则把当前事务挂起 |
| PROPAGATION_MANDATORY | 强制事务执行,若当前不存在事务,则抛出异常 |
| PROPAGATION_NEVER | 以非事务的方式执行,如果当前存在事务,则抛出异常 |
传播级别一般不需要定义,默认就是PROPAGATION_REQUIRED,除非在嵌套事务的情况。
上述描述表格的描述还是比较抽象,下面我们使用一个例子来说明这个传播机制。
假定方法A调用方法B
| 方法B定义的事务类型 | A方法有事务时 | A方法无事务 |
| @Transactional(propagation = Propagation.REQUIRED) | B和A事务合并成一个事务 | B新建一个事务 |
| @Transactional(propagation = Propagation.REQUIRES_NEW) | B新建一个事务,和A事务无关,互不影响 | B新建一个事务 |
| @Transactional(propagation = Propagation.NESTED) | B新建一个A的子事务,A异常影响B,B异常不影响A | B新建一个事务 |
| @Transactional(propagation = Propagation.SUPPORTS) | B加入到A事务中 | B无事务 |
| @Transactional(propagation = Propagation.NOT_SUPPORTED) | 挂起A事务,B以无事务方式执行 | B无事务 |
| @Transactional(propagation = Propagation.MANDATORY) | B加入到A事务中 | B抛异常 |
| @Transactional(propagation = Propagation.NEVER) | B抛异常 | B无事务 |
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring Boot利用JSR303实现参数验证的方法实例
这篇文章主要给大家介绍了关于Spring Boot利用JSR303实现参数验证的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧2020-05-05
springboot中swagger、异步/定时/邮件任务的问题
这篇文章主要介绍了springboot中swagger、异步/定时/邮件任务的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-07-07
全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制
这篇文章主要介绍了全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下2016-06-06
深入了解SpringBoot中@InitBinder注解的使用
这篇文章主要介绍了深入了解SpringBoot中@InitBinder注解的使用,@InitBinder注解可以作用在被@Controller注解的类的方法上,表示为当前控制器注册一个属性编辑器,用于对WebDataBinder进行初始化,且只对当前的Controller有效,需要的朋友可以参考下2023-10-10
SpringBoot参数校验之@Valid与@Validated的用法与场景
这篇文章主要介绍了SpringBoot参数校验的用法与场景,在实际开发中,参数校验是保证接口安全性和数据完整性的重要手段,Spring Boot提供了@Valid和@Validated两个核心注解来实现参数校验,但许多开发者对它们的区别和使用场景存在疑惑,需要的朋友可以参考下2025-02-02


最新评论