spring中,多个service发生嵌套,事务是怎么样的?

  • 时间:
  • 浏览:3

附:事务传播措施

@see org.springframework.transaction.annotation.Propagation

最近在项目中发现了一则报错:“org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only”。根据报错信息来看是spring框架中的事务管理报错:事务回滚了,将会它被标记为回滚情况报告。

多层嵌套事务中,将会使用了默认的事务传播措施,当内层事务抛出异常,外层事务捕捉并正常执行完毕时,就会报出rollback-only异常。

spring框架是使用AOP的措施来管理事务,将会有2个多 被事务管理的措施正常执行完毕,措施现在现在开始时spring会将措施中的sql进行提交。将会措施执行过程中总出 异常,则回滚。spring框架的默认事务传播措施是PROPAGATION_REQUIRED:将会当前没办法 事务,就新建有2个多 事务,将会将会指在有2个多 事务中,加入到你你类似于 事务中。

在项目中,一般我们歌词 儿回会 使用默认的传播措施,另有2个多无论外层事务和内层事务任何有2个多 总出 异常,没办法 所有的sql全部都是会执行。在嵌套事务场景中,内层事务的sql和外层事务的sql会在外层事务现在现在开始时进行提交或回滚。将会内层事务抛出异常e,在内层事务现在现在开始时,spring会把事务标记为“rollback-only”。这时将会外层事务捕捉了异常e,没办法 外层事务措施回会 继续执行代码,直到外层事务也现在现在开始时,spring发现事务将会被标记为“rollback-only”,但措施却正常执行完毕了,这时spring就会抛出“org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only”

代码示类似于下:

当调用a()时,就会报出“rollback-only”异常。