Spring事务控制和传递性理解

一、在同一类方法间相互调用,若是调用方无事务控制,被调用方有事务控制,则被调用方也无事务spring

缘由:外部通过spring容器调用service的方法事务才生效,service类内部方法间相互调用事务不生效,也就是传说中的自调用失效问题。主要缘由是 Spring数据库事务的约定,其实现原理是AOP,而AOP的原理是动态代理,在自调用的过程当中,是类自身的调用,而不是代理对象去调用,那么就不会产生AOP,这样 Spring就不能把你的代码织入到约定的流程中,因而就产生了如今看到的失败场景。数据库

二、默认事务传递性)事务控制A调用事务控制B,若是B抛异常,A处理异常,则整个事务会回滚,同时报错Transaction rolled back because it has been arked as rollback-only异步

 如图所示:箭头表示的2个方法都有事务,外面的事务捕获了里面的事务代理

 

缘由:事务的传递性,由于A调用B,因此A和B都是同一个事务对象,B使用A的事务对象,成为一个整理,B抛异常已经将事务对象设值为需回滚状态(RollbackOnly)了,除非B中直接处理异常,当外层事务处理异常想提交整个事务时,出现异常Transaction rolled back because it has been arked as rollback-only对象

三、事务控制的方法中异步线是没有事务控制的blog

相关文章
相关标签/搜索