Spring手动回滚事务
转载自 https://blog.csdn.net/qq724581322/article/details/51427100
例:
类似这样的方法不会回滚 (一个方法出错,另一个方法不会回滚) :
- if(userSave){
- try {
- userDao.save(user);
- userCapabilityQuotaDao.save(capabilityQuota);
- } catch (Exception e) {
- logger.info("能力开通接口,开户异常,异常信息:"+e);
- }
- }
下面的方法回滚(一个方法出错,另一个方法会回滚):
- if(userSave){
- try {
- userDao.save(user);
- userCapabilityQuotaDao.save(capabilityQuota);
- } catch (Exception e) {
- logger.info("能力开通接口,开户异常,异常信息:"+e);
- throw new RuntimeException();
- }
- }
或者:
- if(userSave){
- try {
- userDao.save(user);
- userCapabilityQuotaDao.save(capabilityQuota);
- } catch (Exception e) {
- logger.info("能力开通接口,开户异常,异常信息:"+e);
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- }
- }
为什么不会滚呢??是对spring的事务机制就不明白。!!
默认Spring 事务只在发生未被捕获的 RuntimeExcetpion时才回滚。
Spring Aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样Aop代理才能捕获到方法的异常,才能进行回滚,默认情况下Aop只捕获RuntimeExcetpion的异常,但可以通过 配置来捕获特定的异常并回滚换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new RuntimeExcetpion(),这样程序异常时才能被Aop捕获进而回滚
解决方案:
方案1.例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeExcetpion()语句,以便让Aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理
方案2.在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)。
原文链接:http://blog.csdn.net/yipanbo/article/details/46048413
Spring手动回滚事务相关推荐
- spring手动回滚事务_Spring总结---gt;03
什么是事务 逻辑上的一组操作,组成这组操作的各个单元,要么全都成功,要么全都失败. 事务的特性 原子性:事务不可分割一致性:事务执行前后数据完整性保持一致隔离性:一个事务的执行不应该受到其他事务的干扰 ...
- spring手动配置
本文总结自:https://www.cnblogs.com/V1haoge/p/7183408.html SpringBoot中免除了大部分配置,但是对于一些特定的情况,还是需要我们进行手动配置的. ...
- 【SpringBoot】Spring手动装配和SpringBoot自动装配
文章目录 1. Warm up 1.1 setter注入 1.2 构造器注入 1.3 属性注入 2. Warm up again 2.1 基于XML的配置 2.2 基于JavaConfig类的配置 3 ...
- spring——手动往spring容器中添加对象
有时候,我们希望可以手动动态的往spring容器中添加对象,而不是必须要项目启动时就决定容器中有哪些对象,对于这种情况,spring提供了一种方式,DefaultListableBeanFac ...
- Spring 手动注册bean
一般情况下,我们Spring应用中的bean都是通过注解或者xml注入到容器中的,有些情况下我们可能想手动往容器中注入bean,即编程方式注入bean. 本文所使用源码包版本:spring-beans ...
- spring手动代码控制事务
为什么80%的码农都做不了架构师?>>> DataSourceTransactionManager tran = new DataSourceTransactionManage ...
- spring手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 转载于:https://www.cnblogs.com/x ...
- springboot 事务手动回滚_来,讲讲Spring事务有哪些坑?
来自公众号:孤独烟 引言 今天,我们接上文<面试官:谈谈你对mysql事务的认识>的内容,来讲spring中和事务有关的考题! 因为事务这块,面试的出现几率很高.而大家工作中CRUD的比较 ...
- SpringBoot异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)
参考:https://blog.csdn.net/zzhongcy/article/details/102893309 概念 事务定义 事务,就是一组操作数据库的动作集合.事务是现代数据库理论中的核心 ...
最新文章
- linux设置nexus开机自启动_在linux中使用nexus搭建maven私服
- Too many connections解决方法
- 关于网站URL转码的问题
- 【GIF动画+完整可运行源代码】C++实现 冒泡排序——十大经典排序算法之一
- HTTP 和 WebSocket的区别
- 三维点云学习(3)7- 实现GMM
- 16级大一c语言考试题及答案,2013年计算机二级C语言上机试题十六及答案
- 调度流程图_怎么做大数据工作流调度系统?大厂架构师一语点破!
- 最新北京市生活常用电话一览表
- 计算机无法更改开机密码,不能修改win7电脑开机密码是怎么回事
- iphone通用设置里显示UDID(tweak)
- 通过fileProvider接收外部App传递文件路径的一些坑
- 信托公司消金小额贷款项目的现金流预测
- C#使用iTextSharp合并pdf,添加页码
- 论做空工具体验对比,股票下跌可选择 期权?涡轮?CFD差价合约?牛熊交易获利
- ubuntu开机登录,操作技巧,嵌入式命令等
- MAC 移动硬盘文件显示灰色
- Linux内存管理(八):paging_init
- centos7使用rpmbuild制作rpm包
- [DAQmx]创建虚拟通道时应当注意的基本问题
热门文章
- list Control实现单元格编辑与插入Combo Box
- WINVER和_WIN32_IE等宏的含义
- C++中空指针调用类成员函数的原理
- API---有意思的API
- docker端口映射或启动容器时报错 driver failed programming external connectivity on endpoint
- MySQL(五)MySQL事务
- Python中的匿名函数和函数式编程
- 测试:将手机摄像头用作网络摄像头的拍摄效果
- 叶琰:AI压缩技术在追上传统编码技术
- LiveVideoStackCon 2019上海 优秀出品人与讲师