0
点赞
收藏
分享

微信扫一扫

【传播行为】



我是????廖志伟????,一名????Java开发工程师????、????Java领域优质创作者????、????CSDN博客专家????、????幕后大佬社区创始人????。拥有多年一线研发经验,研究过各种常见框架中间件的底层源码,对于大型分布式微服务、三高架构(高性能高并发高可用)有过实践架构经验。



文章目录

  • ​​propagation_required(需要传播)​​
  • ​​propagation_supports(支持传播)​​
  • ​​propagation_mandatory(强制传播)​​
  • ​​propagation_nested(嵌套传播)​​
  • ​​propagation_never(绝不传播)​​
  • ​​propagation_requires_new(传播需要新的)​​
  • ​​propagation_not_supported(不支持传播)​​


本文内容:


【传播行为】_回滚

Spring支持7中事务传播行为

一个场景:假设外层方法里面包含二个新增用户和新增角色的方法,二个方法后面还会抛一个异常。

propagation_required(需要传播)

当前没有事务则新建事务,有则加入当前事务。

外围方法未开启事务,插入用户表和用户角色表的方法在自己的事务中独立运行,外围方法异常不影响内部插入,所以两条记录都新增成功。 外围方法开启事务,内部方法加入外围方法事务,外围方法回滚,内部方法也要回滚,所以两个记录都插入失败。

propagation_supports(支持传播)

支持当前事务,如果当前没有事务则以非事务方式执行

外围方法未开启事务,插入用户表和用户角色表的方法以非事务的方式独立运行,外围方法异常不影响内部插入,所以两条记录都新增成功。 外围方法开启事务,内部方法加入外围方法事务,外围方法回滚,内部方法也要回滚,所以两个记录都插入失败。

propagation_mandatory(强制传播)

使用当前事务,如果没有则抛出异常

外围方法开启事务,内部方法加入外围方法事务,外围方法回滚,内部方法也要回滚,所以两个记录都插入失败。 外围方法没有开启事务,两张表数据都为空,在调用用户新增方法时候已经报错了,所以两个表都没有新增数据。

propagation_nested(嵌套传播)

如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则执行需要传播行为。

外围方法开启事务抛出异常,父事务最后回滚,二个方法也进行回滚的,两个表都没有新增数据。 外层方法未开启事务,插入用户表和用户角色表的方法在自己的事务中独立运行,外围方法异常不影响内部插入,所以两条记录都新增成功。

propagation_never(绝不传播)

以非事务的方式执行,如果当前有事务则抛出异常。

外围方法开启事务则抛出异常,两个表都没有新增数据 外层方法未开启事务会以非事务的方式运行,两个表新增成功;

propagation_requires_new(传播需要新的)

新建事务,如果当前有事务则把当前事务挂起,创建新的事务。

无论当前存不存在事务,都创建新事务,所以两个数据新增成功。

propagation_not_supported(不支持传播)

以非事务的方式执行,如果当前有事务则把当前事务挂起。

外围方法未开启事务,插入用户表和用户角色表的方法在自己的事务中独立运行,外围方法异常不影响内部插入,所以两条记录都新增成功。 外围方法开启事务,两个数据新增成功。

总结


以上就是今天要讲的内容,还希望各位读者大大能够在评论区积极参与讨论,给文章提出一些宝贵的意见或者建议????,合理的内容,我会采纳更新博文,重新分享给大家。



举报

相关推荐

0 条评论