首页 > 编程知识 正文

spring事务传播机制7种,spring 解决循环依赖的处理流程

时间:2023-05-03 12:18:51 阅读:241041 作者:4180

在实际项目中为了保证数据的一致性,事务是非常重要的,而spring对事务的支持方便了我们对事务相关操作的开发。

Spring事务的配置方式

spring支持编程式事务管理以及声明式事务管理两种方式
编程式事务管理是侵入性事务管理,使用TransactionTemplate或者直接使用PlatformTransactionManager,对于编程式事务管理,spring推荐使用TransactionTemplate。
声明式事务管理建立在AOP之上,其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,执行完目标方法之后根据执行的情况提交或者回滚,声明式事务最大的优点就是不需要通过编程的方式管理事务(即不需要侵入代码)。这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需要在配置文件中做相关的事务规则声明或者通过注解的方式,便可以将事务规则应用到业务逻辑中。
显然声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的编程方式,声明式事务管理使业务代码不受污染,一个普通pojo只要加上注解就可以或者完整的事务支持,和编程式事务管理相比,唯一不足的地方就是声明式事务管理的粒度是到方法级别,而编程式事务管理是可以到代码块的,但是可以通过提取方法的方式完成声明式事务管理的配置。

Spring事务的传播机制

事务的传播性一般用在事务嵌套的场景,比如事务A里面调用了另外一个事务方法,那么两个方法是各自作为独立的方法提交还是内层的事务合并到外层的事务一起提交,这就是需要事务传播机制的配置来确定怎么样执行
常用的事务传播机制如下
- PROPAGATION_REQUIRED
spring默认的传播机制,能满足绝大部分业务需求,如果外层有事务,则当前事务加入到外层事务,一块提交,一块回滚。如果外层没有事务,新建一个事务执行
- PROPAGATION_REQUES_NEW
该事务传播机制是每次都会新开启一个事务,同时把外层事务挂起,当当前事务执行完毕,恢复上层事务的执行。如果外层没有事务,执行当前新开启的事务即可
- PROPAGATION_SUPPORT
如果外层有事务,则加入外层事务,如果外层没有事务,则直接使用非事务方式执行。完全依赖外层的事务
- PROPAGATION_NOT_SUPPORT
该传播机制不支持事务,如果外层存在事务则挂起,执行完当前代码,则恢复外层事务,无论是否异常都不会回滚当前的代码
- PROPAGATION_NEVER
该传播机制不支持外层事务,即如果外层有事务就抛出异常
- PROPAGATION_MANDATORY
与NEVER相反,如果外层没有事务,则抛出异常
- PROPAGATION_NESTED
该传播机制的特点是可以保存状态保存点,当前事务回滚到某一个点,从而避免所有的嵌套事务都回滚,即各自回滚各自的,如果子事务没有把异常吃掉,基本还是会引起全部回滚的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。