Spring学习笔记——Spring事务只对运行时异常回滚

我们在使用Spring时候一般都知道事务在遇到异常的时候会回滚,岂不知Spring的事务默认只有在发生运行时异常即:RunTimeException时才会发生事务,如果一个方法抛出Exception或者Checked异常Spring的事务并不会回滚。

下面我们来看看异常的分类,异常一般分为Checked异常和RunTime异常。

CheckedException:

Java认为Checked异常都是可以被处理的异常,所以Java程序必须显式的处理Checked异常,如果程序没有处理checked异常,程序在编译时候将发生错误。

我们比较熟悉的Checked异常有

Java.lang.ClassNotFoundException

Java.lang.NoSuchMetodException

java.io.IOException

RunTimeException:

Runtime如除数是0和数组下标越界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。

我们比较熟悉的RumtimeException类的子类有

Java.lang.ArithmeticException

Java.lang.ArrayStoreExcetpion

Java.lang.ClassCastException

Java.lang.IndexOutOfBoundsException

Java.lang.NullPointerException

我们可以通过以下方式改变事务的默认处理方式:

在@Transaction注解中定义noRollbackFor和RollbackFor指定某种异常是否回滚。

@Transaction(noRollbackFor=RuntimeException.class)

@Transaction(RollbackFor=Exception.class)

这就要求我们在自定义异常的时候,让自定义的异常继承自RuntimeException,这样抛出的时候才会被Spring默认的事务处理准确处理。

时间: 2024-12-16 04:13:29

Spring学习笔记——Spring事务只对运行时异常回滚的相关文章

Spring学习笔记——Spring事务仅仅对执行时异常回滚

我们在使用Spring时候一般都知道事务在遇到异常的时候会回滚.岂不知Spring的事务默认仅仅有在发生执行时异常即:RunTimeException时才会发生事务,假设一个方法抛出Exception或者Checked异常Spring的事务并不会回滚. 以下我们来看看异常的分类.异常一般分为Checked异常和RunTime异常. CheckedException: Java觉得Checked异常都是能够被处理的异常,所以Java程序必须显式的处理Checked异常,假设程序没有处理checke

C++ Primer 学习笔记_102_特殊工具与技术 --运行时类型识别[续]

特殊工具与技术 --运行时类型识别[续] 三.RTTI的使用 当比较两个派生类对象的时候,我们希望比较可能特定于派生类的数据成员.如果形参是基类引用,就只能比较基类中出现的成员,我们不能访问在派生类中但不在基类中出现的成员. 因此我们可以使用RTTI,在试图比较不同类型的对象时返回假(false). 我们将定义单个相等操作符.每个类定义一个虚函数 equal,该函数首先将操作数强制转换为正确的类型.如果转换成功,就进行真正的比较:如果转换失败,equal 操作就返回 false. 1.类层次 c

Spring学习笔记--Spring IOC

沿着我们上一篇的学习笔记,我们继续通过代码学习IOC这一设计思想. 6.Hello类 第一步:首先创建一个类Hello package cn.sxt.bean; public class Hello { private String name; public void setName(String name) { this.name = name; } public void show(){ System.out.println("hello,"+name); } } 第二步:创建配置

[快手(AAuto)学习笔记]如何让程序在运行时请求管理员权限(UAC)

作者:ffsystem 作为(糟糕的)程序猿,习惯写代码解决一些简单事务.正常用批处理就能解决大部分工作,复杂一点用AutoIt 3. 有时候要分发给别人,就需要一个界面.外行你程序写得如何他看不懂,也不想搞懂.他只看你界面是否花哨,来判断你行不行.没办法只是个看脸的时代,只好给程序整整容. 但是简单的事情,上VS.用.net:或者用java就太无趣了,而且那玩意整好看一点也麻烦. AutoIt3很好用,但界面,但比较传统,找到一个国产的程序,快手AAuto,好像既轻量级.又能html给程序整容

LoadRunner 学习笔记(2)VuGen运行时设置Run-Time Setting

定义:在Vugen中Run-Time Setting是用来设置脚本运行时所需要的相关选项 注:一般情况下,我们会接触到 Run Logic.Log.Think Time,其他的设置项基本上保持默认设置,特殊项目特殊对待. General  1.Run Logic 运行逻辑,用来设置Action部分重复运行几次 脚本如何运行的,每个action和action之间运行的先后顺序就是在这里设置的 Number of Iterations   只为Run上设置迭代次数(运行的次数),不为Init,End

C++ Primer 学习笔记_101_特殊工具与技术 --运行时类型识别

h2.western { font-family: "Liberation Sans",sans-serif; font-size: 16pt; }h2.cjk { font-family: "微软雅黑"; font-size: 16pt; }h2.ctl { font-family: "AR PL UMing CN"; font-size: 16pt; }h1 { margin-bottom: 0.21cm; }h1.western { fon

Spring学习笔记——Spring中lazy-init与abstract具体解释

Spring的懒载入的作用是为了避免无谓的性能开销,就是当真正须要数据的时候才去运行数据的载入操作.不只在Spring中.我们在实际的编码过程中也应该借鉴这种思想,来提高我们程序的效率. 首先我们看一段配置文件: <beans> <bean> <bean id="creditService" type="com.jader.service.CreditServiceImpl" lazy-init="true"/>

Spring学习笔记--Spring简介

1.spring:给软件行业带来了春天; 2.spring的理念:spring框架的初衷是使的现有的更加实用,spring不是创造轮子(技术或框架),而是使现有的轮子更好的运转;spring本身是一个大杂烩,整合现有的框架技术: 3.Spring优点: 轻量级框架:不具备侵入性(使用某个框架,我们不需要实现它的某个接口,方便框架的替换,原有的代码不需要替换); Ioc容器:控制反转; Aop:面向切面编程; 对事务的支持: 对矿建的支持; ................... 4.主要内容:

Spring学习笔记--Spring表达式语言SpEL

Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean的属性或构造器参数中.字面值我们可以在<property>元素的value属性中使用#{}界定符将值装配到Bean的属性中. <property name="count" value="#{5}" /> 浮点型数字一样可以出现在SpEL表达式中.