首页 > 编程语言 > 详细

Spring事务嵌套引发的异常: Transaction rolled back because it has been marked as rollback-only

时间:2021-06-07 20:38:01      阅读:37      评论:0      收藏:0      [点我收藏+]

spring的@Transactional 可以注解到方法上或者类上,并且只有在 该类被作为spring容器托管的bean的时候,也就是使用@autowird 被注入到其他类中使用,调用该类的方法的时候才生效

因为此时调用方法会被spring容器的 TransactionInterceptor 拦截器拦截,并开启事务

如果是同一个类中的方法 调用 第二个方法 即this.方法 ,第二个方法的事务 是不起作用的,这种情况没有 mark-as roll异常

出现marked as rollback-only异常,是因为使用默认的@Transactional 注解,事务的传播性默认为Propagation.REQUIRED,调用其他类的 事务方法addPerson(user);

这个方法开启的事务是默认Propagation.REQUIRED,也就是沿用外层调用方法的事务 (如果有事务存在 则使用原事务 如果不存在则开启新事务)

外层方法开启了一个事务,内层方法调用的是其他类的事务方法,内层方法发现异常了,会标记整个事务为roll-back,但是外层方法捕获异常 return的时候 会执行commit事务 但是此时发现已经标记异常,所以才会抛出异常

Spring事务嵌套引发的异常: Transaction rolled back because it has been marked as rollback-only

原文:https://www.cnblogs.com/internHe/p/14859917.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!