spring中的事务

一、spring中的事务

1、什么情况下会触发spring事务回滚

方法发生异常就会触发事务管理,在spring中想进行事务回滚必须加上@Transactional注解,下边是出现异常进行捕获进行回滚的源代码

2、如果事务方法抛出IOException会进行事务回滚吗

或者简单一点可以rollbackFor=Exception或者Throwable,这样不管发生哪一类异常就都可以进行捕获了

3、什么情况下spring事务会失效

a方法有事务,有事务出现异常肯定进行回滚如下:

b方法没有事务注解,没有事务,出现异常不会进行回滚。如下:

这种情况下发生异常不会进行回滚,事务没有生效

咱们就看入口,方法2是入口,由于没有加事务注解,所以方法本身没有开启事务,所以就不存在AOP拦截,就不会有事务,方法1虽然有事务,但是不是入口,所以事务失效。

这个时候事务是生效的

代码如下:

如果a方法发生了异常,那么是进行事务回滚的,调用另外一个bean的a方法又是一个入口,由于这个方法开启了事务,所以有AOP拦截,会生成一个代理对象,调用的是代理对象的a方法。

只有public方法加了事务注解是生效的,看源码就知道了,如下:

新的线程发生异常了,方法加了事务注解,不会进行回滚。只对当前线程中的异常进行回滚,开启新的线程中发生异常,是不进行回滚的。

异常被catch 了,不会进行回滚。

抛出的不是runtimeException,异常类型不匹配,不能进行回滚

事务都不在spring容器中肯定不能进行回滚

传播类型选择的本来就不支持事务,肯定就不能回滚了,比如NOT_SUPPORTED、NEVER

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱人间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值