关于java springboot的 @Transactional 问题

image.png
图1
image.png
图2
image.png
图3

我的问题是要执行@Transactional时,如果另一个方法在子类里,也是要加@Transactional的对吧?

如果是业务允许可以一个执行成功,而另一个不执行成功就没问题了.

但是我这里是要求都保存成功.

阅读 2.9k
4 个回答

一、首先@Transactional有以下几种情况是失效的,请先确定你的环境包不包括:
1、@Transactional修饰了非public方法;
2、@Transactional修饰的方法所属类没有被spring托管;
3、@Transactional修饰的方法被当前类没有@Transactional修饰的方法调用;
4、@Transactional修饰方法中指定rollbackOn回滚异常,但方法中抛出了与之不匹配的异常时;
5、@Transactional修饰的方法中使用try{} catch{}捕获了异常且没有重新抛出异常(默认只针抛出Error和RuntimeException及其子类时回滚);
6、@Transactional注解指定了传播方式为Propagation.NOT_SUPPORTED,即禁止事务了;
7、数据库本身不支持事务(这种情况很少见)。
二、针对你的问题,@Transactional修饰的方法里调用了没有被@Transactional修饰的方法时,会不会触发事务?答案是。被调用的方法会使用父方法(即被@Transactional修饰的方法)的事务上下文,被调用的方法抛出异常会触发事务回滚!

@Transactional是具有传递性的哦,也就是说同一个线程里的后续方法都会引入事务

建议你看下@Transactional的用法。

事物失效最常见的一个场景,就是本类的方法相互调用,不会走代理,事物就失效了
强制走代理就行了

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