随手记(一):SpringBoot @Transactional的rollbackFor属性

目录

 

一.简单回顾Java Exception

二.rollbackFor属性介绍

1.事务控制的3种方式

2.事务不回滚的原因


一.简单回顾Java Exception

该图摘自:https://blog.csdn.net/zhangerqing/article/details/8248186

异常可以分为运行时异常(RuntimeException)和非运行时异常(Exception中除RuntimeException及其子类以外的)。

异常还可以分为受控异常(checked exception)和不受控异常(unchecked exception)

受控异常(Checked Exception):就是非运行时异常,即Exception中除了RuntimeException及其子类以外的。受控异常这类异常必须写try{}catch{},或者throw抛出,否则编译通不过。

不受控异常(unchecked exceptions):RuntimeException和Error。这类异常不需要try{}catch{},也不需要throw抛出,编译能通过。为什么要使用非受控异常?为了简化代码。试想一下,如果所有可能出现异常的地方(比如访问数组元素可能会越界、调用对象方法,对象可能为null),我们都写try{}catch{},或者throw 抛出,那么代码肯定冗余的不成样子了。也就是说,采用非受控异常(运行时异常)可以减少代码的污染。

 

二.rollbackFor属性介绍

1.事务控制的3种方式

  • 编程式事务:
  • 声明式事务:
  • 注解式事务:

2.事务不回滚的原因

  1. 默认情况下spring事务只在发生未被捕获的 runtimeexcetpion时才回滚。  
  2. Service方法中把异常try catch并且没有手动抛出RuntimeException
  3. Service方法中抛出的异常不为运行时异常(IO异常)

以注解为例:在类或方法前注解配置@Transactional(rollbackFor=Exception.class)就可以实现:

当发生受控异常(checked exceptions)时,事务也进行回滚。

原文出处:

https://www.cnblogs.com/zeng1994/p/8257763.html

https://blog.csdn.net/ljyhust/article/details/73431968?locationNum=5&fps=1

https://blog.csdn.net/ryelqy/article/details/80019106

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值