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


    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事务 但是此时发现已经标记异常,所以才会抛出异常

  • 相关阅读:
    MVC过滤器
    MVC自带的校验
    FPGA简单概述
    CAN总线扩展数据帧介绍
    简述人工智能发展的先决条件
    CAN总线标准帧
    CAN总线应用
    CAN总线优点
    CAN总线概述
    高速PCB设计注意事项
  • 原文地址:https://www.cnblogs.com/internHe/p/14859917.html
Copyright © 2020-2023  润新知