美文网首页springMySQL
方法之间调用事务回滚问题

方法之间调用事务回滚问题

作者: 星辰_7d80 | 来源:发表于2020-11-03 13:46 被阅读0次

同类中方法调用必须重新定义下自己,不然被调用的方法事务不起作用,原因是spring aop的代理机制导致的,事务是在代理类上实施而不是目标对象上

示例

常见有疑问的场景:

1:a和b都是默认事务传播特性 a调b,b被try-catch住,b发生异常

a和b都会发生回滚,原因是默认传播特性b事务依赖a事务,b不是外层事务边界,则事务拦截的时候标记回滚记录等待外层事务一块回滚

异常回滚核心代码

2、a是Propagation.REQUIRED,b是Propagation.REQUIRES_NEW,b发生异常

b回滚,a不回滚,原因是b的传播特性导致外层事务挂起,执行自己的事务,则发生异常直接回滚,而b被try-catch住不会感知异常不回滚

3、a是Propagation.REQUIRED,b是Propagation.NESTED,b发生异常

同上,只是原因不同,由于b是嵌套事务,可以独立于外层事务,会有一个savePoint保护点,当b发生异常,则会回滚到保护点

嵌套事务

ok,其他的一些情况可以自己调试看下,最重要的核心流程代码就是类TransactionAspectSupport下面的方法

一个回滚一个提交方法

相关文章

  • 方法之间调用事务回滚问题

    同类中方法调用必须重新定义下自己,不然被调用的方法事务不起作用,原因是spring aop的代理机制导致的,事务是...

  • 消息驱动的分布式事务实现

    微服务架构的事务问题 服务间调用操作的回滚 服务间调用失败的重试问题 微服务架构的事务问题解决 方法1:减少服务间...

  • 事务相关的问题总结

    一、事务回滚问题 二、事务失效问题 三、事务失效的解决办法 方式一:自己手动创建事务,提交事务,回滚事务(Spri...

  • spring相关

    事务方法A调用非事务方法B,则A,B处于同一事务中,B中发生异常会导致A,B中操作都回滚。 非事务方法A调用事务方...

  • mysql 事务回滚,online ddl

    回滚当事务中有DDL时,事务回滚会出错,当事务中只有DML时,回滚一般不会出问题DDL:新建表等操作DML:数据插...

  • java基础 :事务的传播行为

    测试了一下事务失效和事务的传播行为 避开了几个容易出现的问题 1.事务之间嵌套方法 A方法无事务 调用本类B方法有...

  • Spring事务异常回滚

    默认 spring 事务只在发生未被捕获的 RuntimeExcetpion 时才会回滚。 类似这样的方法不会回滚...

  • SpringBoot事务回滚问题

    SpringBoot事务不回滚问题 Spring声明式事务管理默认对 非检查型异常 或 运行时异常 进行事务回滚,...

  • 18个示例详解 Spring 事务传播机制(附测试源码)

    什么是事务传播机制 事务的传播机制,顾名思义就是多个事务方法之间调用,事务如何在这些方法之间传播。 举个例子,方法...

  • 对redis事务的支持

    在spring事务方法中,会一起提交或回滚

网友评论

    本文标题:方法之间调用事务回滚问题

    本文链接:https://www.haomeiwen.com/subject/cskbvktx.html