关于spring事务自调用的问题

如下,funcA调用funcB,由于自调用,所以funcB上的 @Transactional是无效的
我的理解:funcA在事务中,而funcB是funcA内部的一部分,所以funcB处于funcA所在的事务内
但是事实好像不是如此,为何?

public class MyServiceImpl{

 @Transactional
 funcA(){
    sql_insert(a);
    funcB();
 }

 @Transactional
 funcB(){
    sql_insert(b);
 }
}
阅读 3.1k
5 个回答
新手上路,请多包涵

这跟spring的事务传播行为有关,你可以看下。

funcB就是以普通方法的身份处在funcA的事务中啊,没什么问题

参考spring文档

mode是proxy(默认)下自调用不会识别到事务,配置成aspectj才行

新手上路,请多包涵

你这个问题难道不是要把funcA的注解去掉才能看得出区别么?

如果调用者直接调用funcA,funcB的spring事务管理没有生效,调用者直接调用funcB是spring事务管理的
调用者与MyServiceImpl的bean不是一个对象即可

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题