Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

关于java springboot的 @Transactional 问题

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

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

一、首先@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修饰的方法)的事务上下文,被调用的方法抛出异常会触发事务回滚!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...