事务的使用位置和回滚规则

事务使用的前提

默认情况下,数据库处于自动提交模式。每条SQL处于一个单独的事务中,成功则提交,失败则回滚。
事务管理,就是将一组相关的SQL放于一个事务中,管理这一组SQL的提交或回滚,因此必须关闭数据库的自动提交方式。

@Transactional 注解一般应用在什么位置?

在这里插入图片描述
spring 官方文档强烈建议不能使用在接口(interface)上,虽然业务类可以实现接口层,但是接口上的注解是不会被继承过来的。如果是Aop通过代理的方式实现接口的话,一定要用jdk代理方式(接口代理),不能通过cglib方式代理(类集成代理方式),这种方式会导致接口上的注解信息会丢失,导致事务不能够生效。

主要是使用在业务实现类上,业务方法必须是 public 方法, 不能是 protected 和 private 方法,会主动注解无法生效。
不能通过本地方法调用,就是通过 this.xxx 的形式调用,也会导致注解无法生效。

@Transactional 事务回滚规则

在这里插入图片描述
@Transactional 注解提供了一些参数,可以设置回滚规则的。
1、noRollbackFor 指定不回滚 ---------> 可以指定那种异常不回滚
这个地方事务虽然不会滚,但是事务是生效的。
2、rollbackFor 指定回滚 ---------> 可以指定那种异常一定要回滚
3、RuntimeException 异常回滚 ---------> 在不指定的时候,就会去判断是否是运行时异常,若是运行时异常就会回滚
如果都不满足以上三种规则,就直接提交。

总结

使用位置

1、可以使用在接口或接口方法上,AOP必须是接口代理方式(JDK代理) — 强烈不推荐
2、可以使用在类以及类方法上 — 推荐
3、注解只能应用在public方法上,其他级别(protected, private)不生效。
4、只有来自外部方法调用,才能生效。(内部方法调用不生效)

回滚规则

1、默认配置下(RuntimeException 异常回滚),方法体只有抛出 RuntimeException ,才回滚事务;
2、设置 noRollbackFor 指定不回滚规则,方法体抛出指定的异常(XxxException.class)不回滚事务;
3、设置 rollbackFor 指定回滚规则,方法体抛出指定的异常(XxxException.class)会回滚事务;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值