同类中方法调用必须重新定义下自己,不然被调用的方法事务不起作用,原因是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发生异常,则会回滚到?;さ?/p>
ok,其他的一些情况可以自己调试看下,最重要的核心流程代码就是类TransactionAspectSupport下面的方法
最后编辑于 :
?著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...