关于Spring 声明式事务处理时,throws exception不回滚的问题
文章转自:http://cn-done.iteye.com/blog/775519
前一段时间,项目代码评审,发现有TX不使用Spring的事务处理,而直接封装方法,手动进行数据的回滚,得悉原因是:抛出异常以后事务不起作 用,没有回滚。这理由顿时让人很无语,不过还算个聪明的TX,知晓另辟蹊径,但是在insert的时候,手动回滚直接delete就可以了,如果是 update,不晓得还会有什么更犀利的办法。
仔细评审代码细节,发现该TX压根没有按照框架原先设计在service层throws BusinessException,而是直接throws Exception。Spring配置异常回滚采用的是rollback-for=“BusinessException”。TX提出疑问:Spring 不是抛出异常事务就会回滚么?带着疑问,查阅资料,分析源代码,最终找到想要的答案。这一切来源于java的检查性异常、非检查性异常的区别。
使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择声明式的事务管理,在spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作。
那么什么是检查型异常什么又是非检查型异常呢?
最简单的判断点有两个:
1.继承自runtimeexception或error的是非检查型异常,而继承自exception的则是检查型异常(当然,runtimeexception本身也是exception的子类)。
2.对非检查型类异常可以不用捕获,而检查型异常则必须用try语句块进行处理或者把异常交给上级方法处理总之就是必须写代码处理它。所以必须在service捕获异常,然后再次抛出,这样事务方才起效。
参考文章:http://blog.csdn.net/ilovejava_2010/article/details/7861749
转载于:https://my.oschina.net/liangzhenghui/blog/179917
关于Spring 声明式事务处理时,throws exception不回滚的问题相关推荐
- Spring声明式事务管理中的事务回滚
一:使用 本文在spring + spring mvc + mybatis中使用 第一步配置xml:注意xml最前面tx名称空间一定要配置 <beans xmlns="http://w ...
- 为什么spring中的controller跳转出错_你的业务代码中Spring声明式事务处理正确了吗?
Spring 针对 Java Transaction API (JTA).JDBC.Hibernate 和 Java Persistence API(JPA) 等事务 API,实现了一致的编程模型,而 ...
- Spring 声明式事务处理....XML
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Spring声明式事务配置管理方法
/*2011年8月28日 10:03:30 by Rush */ 环境配置 项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加 ...
- Spring声明式事务管理的配置详解
环境配置 项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加方法: 点击项目右键->Build Path->Add ...
- Spring声明式事物配置管理
Spring声明式事物配置管理 1.首先在applicationContext.xml添加以下内容: <!-- 配置事务管理器 --> <bean id="transact ...
- java spring 事务_java 事务与spring 声明式事务
Spring声明式事务让我们从复杂的事务处理中得到解脱.使得我们再也无需要去处理获得连接.关闭连接.事务提交和回滚等这些操作.再也无需要我们在与事务相关的方法中处理大量的try-catch-final ...
- spring 事务原理_Spring声明式事务处理的实现原理,来自面试官的穷追拷问
公众号[JavaQ]原创,专注分享Java基础原理分析.实战技术.微服务架构.分布式系统构建,诚邀点赞关注! 面试官:有如下代码场景,A类的a1方法没有标注@Transactional注解,a2方法标 ...
- 大数据WEB阶段Spring框架(三)声明式事务处理
Spring整合JDBC-声明式的事务处理 一.Spring整合JDBC步骤 导入jar包 编写数据库配置文件 也可以将数据库配置信息单独配置后引入Spring容器中 代码中使用 二.Spring框架 ...
最新文章
- java json数据输出,java服务器端输出JSON格式数据
- 全球及中国商业座机电话行业投资潜力及竞争格局展望报告2021-2027年版
- 【数据结构与算法】之深入解析“不同路径II”的求解思路与算法示例
- ftp限流java,FTP流量限制的方法
- 【转】浅析task_struct结构体
- 注意力机制--转载自我的学生隆兴写的博客
- mysql 自定义序列号_在mysql中怎样设置,才能自动添加序列号
- mysql安装后变10g_Oracle 10G安装中一些常见问题解决
- python编程多行输入_Python20-02_GUI编程----Text多行文本框详解
- 数据分析学习笔记—文件处理与pdf处理
- jsp中写隐藏td标签_28. Django 2.1.7 模板语言 变量、标签、过滤器、自定义过滤器、模板注释...
- 利用lnmp一键安装的php环境忘记mysql,root用户密码解决方法
- PHP短视频无水印解析源码
- Azkaban Flow 2.0的使用
- 角色权限管理系统(角色功能授权)
- iOS为什么获取不到设备的DeviceToken
- php 的单例模式(二)
- 3.1 决策树的基本思想
- 3、基于51单片机语音识别控制三路开关系统设计
- 从e租宝被查 看P2P网站安全
热门文章
- 注意事项,不定期更新
- Ubuntu18.04安装qt后的问题
- JavaScript基础:(加号,数值转换,布尔转换)
- CodeForces - 434D Nanami's Power Plant
- [RM HA 1] Cloudera CDH5 RM HA功能验证
- MOSS点滴(1):如何开发和部署feature
- 十月下旬腾讯,网易游戏,百度盛大迅雷校园招聘笔试题集锦(10.25)
- SUID SGID LINUX 权限安全设置
- C++中了类继承和调用父类的构造函数方法
- 高并发02_同步锁的一些题目