spring 两个方式同时开启事务为什么只有一个能回滚?

spring 两个方式同时开启事务为什么只有一个能回滚?不知道为什么,是不是不能这么用呢?

两个方法都加上了 @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED) 注解

clipboard.png

自己手动声明的异常

clipboard.png

在测试过程中,只有出现异常的方法才能够回滚,第一个方法直接写入数据库中了,不知道这样怎么处理

阅读 4.7k
3 个回答

createUsersysUserBindingAuth两个方法的事务不能同时回滚么?
既然事务的传播属性设置了Propagation.REQUIRED,那么调用的时候就是应该同时回滚的,但是在你的代码上,并没看到相互之间的调用。如果你是分两次调用的话,并不会产生同时的回滚,因为两次调用相当于产生了两个事务,Propagation.REQUIRED这个属性等于没有设置。
只有你在createUser中调用sysUserBindingAuth(或相反)才能同时回滚。
例如:

createUser(){
    // 你的逻辑
    sysUserBindingAuth(); //调用,这个时候Propagation.REQUIRED才会被当成一个事务
}

另外,建议最好贴代码,不要贴图

新手上路,请多包涵

为什么不把这两个方法合到同一个方法用一个@Transactional呢?你用两个@Transactional就相当于两个独立的事务,其中一个出错当然不会影响另一个了。

开启aspectj了吗

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