Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Boot 事物回滚

Spring Boot 事物回滚

原创
作者头像
FHAdmin
修改于 2021-07-05 01:56:11
修改于 2021-07-05 01:56:11
99900
代码可运行
举报
文章被收录于专栏:FHADMINFHADMIN
运行总次数:0
代码可运行

Springboot中事务的使用:

1、启动类加上@EnableTransactionManagement注解,开启事务支持(其实默认是开启的)。

2、在使用事务的public(只有public支持事务)方法(或者类-相当于该类的所有public方法都使用)加上@Transactional注解。

在实际使用中一般是在service中使用@Transactional,那么对于controller->service流程中:

如果controller未开启事务,service中开始了事务,service成功执行,controller在之后的运行中出现异常(错误),不会自动回滚。

也就是说,只有在开启事务的方法中出现异常(默认只有非检测性异常才生效-RuntimeException )(错误-Error)才会自动回滚。

如果想要对抛出的任何异常都进行自动回滚(而不是只针对RuntimeException),只需要在使用@Transactional(rollbackFor = Exception.class)即可。

开启事务的方法中事务回滚的情况:

①未发现的异常,程序运行过程中自动抛出RuntimeException或者其子类,程序终止,自动回滚。

②使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();进行手动回滚。

③注意:如果在try-catch语句中对可能出现的异常(RuntimeException)进行了处理,没有再手动throw异常,spring认为该方法成功执行,不会进行回滚,此时需要调用②中方法进行手动回滚 (from fhadmin.cn)

另外,如果try-catch语句在finally中进行了return操作,那么catch中手动抛出的异常也会被覆盖,同样不会自动回滚。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//不会自动回滚
try{
    throw new RuntimeException();
}catch(RuntimeException e){
    e.printStackTrace();
}finally{
}
//会自动回滚
try{
    throw new RuntimeException();
}catch(RuntimeException e){
    e.printStackTrace();
    throw new RuntimeException();
}finally{
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
spring事务回滚的多种方式「建议收藏」
转:https://www.cnblogs.com/zeng1994/p/8257763.html
全栈程序员站长
2022/11/03
2.2K0
springboot 事务回滚
**1.**只有在开启事务的方法中出现异常,才会自动回滚,需要在service的public方法上面加上 @Transactional(rollbackFor = Exception.class),一旦程序出现异常,事务会自动回滚
六月的雨在Tencent
2024/03/28
3740
springboot 事务回滚
springboot 事务回滚「建议收藏」
**1.**只有在开启事务的方法中出现异常,才会自动回滚,需要在service的public方法上面加上 @Transactional(rollbackFor = Exception.class),一旦程序出现异常,事务会自动回滚
全栈程序员站长
2022/09/05
9940
spring boot唯一性判断不满足后,如何Transactional回滚
在Spring Boot中,如果需要在唯一性判断不满足时进行事务回滚,可以通过以下方式实现:
JaneYork
2024/05/25
2330
Spring事务异常回滚需要数据库引擎支持
例:一个方法报异常,另一个方法回滚 在catch语句中最后增加throw new RuntimeException()语句,以便让aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理
似水的流年
2019/12/05
9420
Spring事务回滚和异常类
转载自 https://www.cnblogs.com/tianyuchen/p/6678084.html
allsmallpig
2021/02/25
1.2K0
怎样确保java代码在抛出异常时都回滚,而不只是运行时异常
/** TransactionAspectSupport手动回滚事务:*/ @Transactional(rollbackFor = { Exception.class })
用户1220053
2019/05/26
1.8K0
spring事务为什么不生效,回滚失效,事务try catch
Spring事务的本质其实就是数据库Innodb对事务的支持,没有innodb是事务支持,spring是无法提供事务支持的。真正的数据库层的事务提交和回滚是通过binlog或者redo log实现的。
HaC
2020/12/30
3.3K0
Spring事务@Transactional深度讲解
spring事务有配置文件和注解两种方法,配置文件方式原理这里就不做过多的介绍,本次重点解释注解@Transactional的原理。
Java深度编程
2021/03/07
1.3K0
Spring事务@Transactional深度讲解
springboot事物oracle,SpringBoot 事务管理
事务管理是项目中必不可少的一部分,使用SpringBoot时,可以很方便的配置和使用事务管理器。
全栈程序员站长
2022/09/03
6740
springboot 事务,多张表的操作事务回滚
结果为a表的数据删除成功了,b表的数据未成功删除,这时候我们应该是b表数据回滚,a表数据也回滚,那么我们应该怎么实现这种方式呢?
AlbertZhang
2020/09/02
3.5K0
Spring MVC Controller层事物注解不生效
最近在写一个管理台页面,是从页面提交多个form到controller层的,这些form要么都能提交成功,要么都失败。controller层需要进行事物处理,于是简单的加了@Transactional注解,测试的时候,我故意把最后一个表单的某个字段长度设置超长,后台肯定会报data too long exception。代码主体简要如下:
幽鸿
2020/04/02
1.2K0
Spring事务的传播机制
Spring ⼿动操作事务和上⾯ MySQL 操作事务类似, 有 3 个重要操作步骤: • 开启事务(获取事务) • 提交事务 • 回滚事务
用户11305962
2025/04/03
1120
Spring事务的传播机制
【Spring Boot】Spring 事务探秘:核心机制与应用场景解析
事务是⼀组操作的集合, 是⼀个不可分割的操作. 事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时成功, 要么同时失败
用户11288949
2025/01/17
910
【Spring Boot】Spring 事务探秘:核心机制与应用场景解析
spring事务失效的几种情况与原因
失效原因: spring事务只有捕捉到了业务抛出去的异常,才能进行后续的处理,如果业务自己捕获了异常,则事务无法感知。
终有救赎
2023/10/16
2540
SpringMVC中的事务和异常
所以我们service层在添加了try catch日志打印后,抛出的runtime类异常需要在controller层进行捕获,捕获之后,在catch中编写操作失败后返回值的信息。
码客说
2019/10/21
6600
spring事务失效的几种场景以及原因
spring事务失效场景可能大家在很多文章都看过了,所以今天就水一篇,看大家能不能收获一些不一样的东西。直接进入主题
lyb-geek
2022/03/01
2.4K0
spring事务失效的几种场景以及原因
Java的@Transactional事务回滚
在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@Transactional 的属性配置信息,这个代理对象决定该声明@Transactional 的目标方法是否由拦截器 TransactionInterceptor 来使用拦截,在 TransactionInterceptor 拦截时,会在在目标方法开始执行之前创建并加入事务,并执行目标方法的逻辑, 最后根据执行情况是否出现异常,利用抽象事务管理器AbstractPlatformTransactionManager 操作数据源 DataSource 提交或回滚事务。
全栈程序员站长
2022/07/25
2.3K0
Java的@Transactional事务回滚
Spring事务和事务传播机制(1)
在Spring框架中,事务管理是一种用于维护数据库操作的一致性和完整性的机制。Spring事务管理提供了灵活的方式来处理事务,包括事务的创建、提交、回滚以及事务的传播行为。
终有救赎
2023/10/16
2400
Spring事务和事务传播机制(1)
fix bug:Spring中事务不生效的问题
@Transactional(propagation = Propagation.REQUIRES_NEW)
关忆北.
2021/12/07
7950
相关推荐
spring事务回滚的多种方式「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验