Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 ?...RuntimeException异常 Exception异常包括RuntimeException异常和其他非RuntimeException的异常。 ...2、spring事务以及配置 spring事务的默认配置 Spring的事务管理默认是针对unchecked exception回滚,也就是默认对Error异常和RuntimeException异常以及其子类进行事务回滚...throws抛出,且事务默认对checked异常不进行回滚。...spring事务回滚异常的修改 a、注解方式。
Spring事务管理配置方式: XML模糊匹配,绑定事务管理 注解,可对每个需要进行事务处理的方法单独配置,只需 @Transactional,然后添加属性配置 为简便,本文使用注解方式。...Spring初始化时,会通过扫描拦截对事务的方法进行增强。若目标方法存在事务,Spring就会创建一个Bean对应的代理(Proxy)对象,并进行相关的事务处理操作。...2 unchecked 异常与事务回滚 用户管理功能,每位用户注册后,都往数据库里存入信息: Mapper类: 数据库表Schema: 业务类 StudentService包括一个保存的方法...测试该事务是否回滚:若发现用户名=JavaEdge,抛异常,触发事务回滚。...#rollback =》事务才回滚: 综上,Spring 处理事务时,若没有在 @Transactional 配置 rollback 属性,则只有捕获到 RuntimeException 或 Error
Spring事务回滚与异常 Spring被事务管理的方法,需要抛出非检查异常,即运行期异常才能进行回滚 对非检查型类异常可以不用捕获,而检查型异常则必须用try语句块进行处理或者把异常交给上级方法处理总之就是必须写代码处理它...所以必须在service捕获异常,然后再次抛出,这样事务方才起效。...在spring的事务管理环境下,使用unckeckedException可以极大地简化异常的处理,只需要在事务层声明可能抛出的异常(这里的异常可以是自定义的unckecked exception体系),...每一个业务方法开始时都会打开一个事务。 Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked如果遇到checked意外就不回滚。...需要强调的是Spring的异常机制重点在于应用编程模型。与SqlException和其他数据存取API不同的是: Spring的异常机制是为了让开发者使用最少, 最清晰的代码。
更多Spring事务问题请访问链接:Spring事务回滚疑难详解 一,为什么框架中根本没有对Exception的一般子类进行回滚配置,异常发生时,事务都进行了回滚 ,说好的只会对RuntimeException...受检异常(Checked)一般在编译期就被检出,这就给你造成了一个Spring对于所有异常都会发生回滚的误解。...② 实际上,当我们在项目开发中加入了Spring框架以后,SQL异常都被org.springframework重写,正如上面的重复主键的SQL异 常。...产生原因:很显然该异常原因属于一般异常,而被Spring捕捉后抛出其他自定义的RuntimeException 具体可见:org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate...RuntimeException的子类 得出结论:Spring框架下,所有SQL异常都被org.springframework重写为RuntimeException,事务因此也会发生回滚!
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } 其实像第一种try catch这种把整个包裹起来,这种业务方法也就等于脱离了spring...事务的管理,因为没有任何异常会从业务方法中抛出,全被捕获并“吞掉”,导致spring异常抛出触发事务回滚策略失效。...如果在catch代码块中采用页面硬编码的方式使用spring api对事务做显式的回滚,这样写也是可以的。...InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。...如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。 MyISAM:插入数据快,空间和内存使用比较低。
纳闷了一会儿,看到双层事务,就想起了 Spring事务传播机制,前边理解得比较肤浅。Spring 系列面试题和答案我全部整理好了,请关注公众号Java技术栈,回复:面试。...6、PROPAGATION_NEVER 以非事务方式运行,如果存在事务,就抛出异常。...7、PROPAGATION_NESTED 开始执行事务前,先保存一个savepoint,当发生异常时,就回滚到savepoint;没有异常时,跟着外部事务一起提交或回滚。...具体原因 1、看了上边的事务传播机制,继续细化问题,内外层共用一个事务,内层抛出异常,会导致整个事务失败。...另外,大家想学 Spring Boot 的看下这个仓库,太全了。 https://github.com/javastacks/spring-boot-best-practice 怎么解决?
在实际开发中,会经常涉及事务管理问题,为此 Spring 提供了专门用于事务管理的API。Spring 的事务管理简化了传统事务管理的流程,并且在一定程度上减少了开发者的工作量。...Spring 的事务管理分为2种形式: 传统的编程式事务管理:通过编写代码实现的事务管理,包括定义事务的开始、正式执行事务提交和异常时的事务回滚(我们能想到 AOP,这就是把事务代码封装到了 “切面”中...基于XML方式的声明式事务 通过在配置文件中配置事务规则的相关声明来实现。Spring2.0 以后,提供了 tx 命名空间来配置事务, 来配置事务的通知/增强处理。...我们在他们的中间制造一个异常,即增加一个除数0异常。...7.配置为事务 在 Spring 核心配置文件中进行配置,包括: 增加 aop.tx 约束 配置事务管理器 配置事务通知 配置 aop,在其中将切入点与事务通知整合 <?
一、Spring事务简介 事务作用:在数据层保障一系列的数据库操作同成功同失败 Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败 实现: 通过PlatformTransactionManager...,转账失败,但是异常之前操作成功,异常之后操作失败,整体业务失败 开启事务: Spring配置类中使用@EnableTransactionManagement注解开启事务管理 在JdbcConfig中设置事务管理器...@Transactional注解开启事务 Spring注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合 注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务...三、Spring事务角色 事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法 事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法 四、事务相关配置 属性...设置是否为只读事务 boolean readOnly=true 只读事务 timeout 设置事务超时时间 int (秒) time = -1 永不超时 rollbackFor 设置事务回滚的异常类数组
1、什么是事务? 事务是指逻辑上的一组操作,这组操作要么全部成功,要么全部失败。 2、事务的特性 ①原子性:指事务的操作要么全部都发生,要么都不发生。...③隔离性:指多个事务并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离(可以通过设置事务的隔离级别解决,后续会讲到)。...3、Spring事务管理器 Spring事务管理器高层抽象接口主要有3个接口 ①PlatformTransactionManager(平台事务管理器):主要是进行事务的提交回滚等功能。...③TransactionStatus(事务具体运行状态):包括事务是否已提交、是否是新创建的事务、是否有保存点等。...4、PlatformTransactionManager接口 根据不同的持久化框架提供了不同的PlatformTransactionManager接口实现: ①使用Spring JDBC或iBatis
Spring 事务 关于理论性的内容,我在之前的一篇文章中介绍过,这里不再过多阐述,这里给出之前文章的链接:Spring 事务管理 什么是事务 是一组逻辑操作,要么执行,要么不执行。...-- 数据源 --> Spring 事务接口 PlatformTransactionManager...(2)事务传播行为(为了解决业务层方法之间互相调用的事务问题): 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。...TransactionDefinition.PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。...TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
Spring框架 - Spring事务 事务操作(事务概念) 1 、什么事务 ( 1 )事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操 作都失败 ( 2 )典型场景:银行转账...使用事务进行解决 ( 2 )事务操作过程 事务操作( Spring 事务管理介绍) 1 、事务添加到 JavaEE 三层结构里面 Service 层(业务逻辑层) 2 、在 Spring 进行事务管理操作...AOP 原理 5 、 Spring 事务管理 API ( 1 )提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类 事务操作(注解声明式事务管理) 1 、在 spring 配置文件配置事务管理器...readOnly默认值false,表示可以查询,可以添加修改删除操作 ( 3 )设置readOnly值是true,设置成true之后,只能查询 6 、 rollbackFor :回滚 ( 1 )设置出现哪些异常进行事务回滚...7 、 noRollbackFor :不回滚 ( 1 )设置出现哪些异常不进行事务回滚 事务操作( XML 声明式事务管理) 1 、在 spring 配置文件中进行配置 第一步 配置事务管理器 第二步
2、Spring事务基本概念 2.1、基础配置 我们先来回顾一下Spring事务的基础配置信息,以下由ChatGPT给我们提供的相关资料: 2.1.1、Spring事务的基础配置 1、问:Spring事务的基础配置...PROPAGATION_MANDATORY:表示必须在一个已存在的事务中执行,否则抛出异常。...PROPAGATION_NEVER:表示以非事务的方式执行操作,如果当前存在事务,则抛出异常。...此时createOrder()方法可以直接try-catch异常,然后进行分支逻辑事务处理。...非公共方法:只有公共方法才会被代理,如果事务注解被用于非公共方法,那么事务也不会生效。 异常被捕获:如果在事务方法内部抛出异常,但是异常被捕获并处理了,那么事务就不会生效。
Spring 事务不生效的原因 同一个类中无事务方法调用一个有事务方法事务不生效 public void testTransactionWork() { insertTransaction();...Spring 事务的传播级别 Spring 事务传播级别与数据库事务隔离级别不同,传播分为 7 种级别: PROPAGATION_REQUIRED:Spring的默认传播级别,如果上下文中存在事务则加入当前事务...如果外层有事务并抛出异常,被嵌套的内层事务会回滚,反之如果内层事务抛出异常,外层事务不受影响。...这里的原因是,当事务发生异常会设置一个状态 Rollback, 如果外围事务读到了这个异常的状态,提交的时候就会抛出上述的异常(详细代码可以看参考资料中 Spring 事务源码分析) PROPAGATION_REQUIRES_NEW...,内部事务为外围事务的子事务,插入“张三”内部方法抛出异常,可以单独对子事务回滚 参考资料 Spring 事务源码剖析 一口气说出6中@Transactional失效的场景
在使用Spring管理事务时会遇到一些情况使事务失效,下面列举一些常见的情况: 1....可能有一些特殊情况导致使用MySQL 5.5.5之后版本的默认的存储引擎也为MyISAM,如果是这样,那么Spring事务便不会生效。...DataSource必须和MyBatis中的DataSource一致,并且事务管理器要被Spring管理。...如果没有配置事务管理器或者事务管理器配置有误,事务失效 5. catch语句未抛出异常 程序异常被忽略,并且不抛出异常,事务会失效 6....抛出的异常类型错误 @Transactional 默认回滚的异常是 RuntimeException 和 Error,假如不进行设置,如果遇到Exception异常,事务会失效
/第三步 没有发生异常,提交事务 }catch(Exception e) { //第四步 出现异常,事务回滚 } } 事务管理 事务添加到 JavaEE 三层结构里面的 Service...层(业务逻辑层) 在 Spring 进行事务管理操作有两种方式 编程式事务管理 声明式事务管理(推荐使用) 基于 xml 配置文件方式 基于注解方式(推荐使用) 在 Spring 进行声明式事务管理...,底层使用 AOP 原理 Spring 事务管理 API :提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类 注解声明式 1、在 spring 配置文件配置事务管理器 <!...小红 1100 声明式事务参数 propagation:事务传播行为 多事务方法直接进行互相调用,Spring 框架事务传播行为有7种 传播属性 描述 REQUIRED 如果有事务在运行,当前的方法就在这个事务内运行...当前的方法不应该运行在事务中,如果有运行的事务,就抛出异常 NESTED 如果有事务运行,当前的方法就应该在这个事务的嵌套事务内运行,否则,就启动一个新的事务,并在它自己的事务内运行 如上,传播级别为
2.3 声明式事务 Spring框架提供了声明式事务管理的功能,允许开发者通过配置来定义事务规则,而无需编写大量的事务管理代码。...3.7 事务属性:回滚策略 ①介绍 声明式事务默认只针对运行时异常回滚,编译时异常不回滚。...虽然购买图书功能中出现了数学运算异常(ArithmeticException),但是我们设置的回滚策略是,当出现ArithmeticException不发生回滚,因此购买图书的操作正常执行 3.8 事务属性...以下是Spring基于XML的声明式事务是如何实现的简要步骤: 4.1、准备工作 可以直接把基于注解的声明式事务的工程直接拷贝一份,改个名字即可 4.2、修改Spring配置文件 将Spring配置文件中去掉...-- rollback-for属性:设置回滚的异常 --> <!
疫情期间在家重新读了《Spring in Action》,每次翻阅总有一些收获,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识简要总结梳理一下...Spring声明式事务让我们从复杂的事务处理中得到解脱。...声明事务 1、配置方式-注解元数据驱动的声明式事务(@Transactional)、也可以采用XML元数据驱动的声明式事务 2、实现原理-Spring事务采用AOP的方式实现、PlatformTransactionManager...4、Spring事务保存点savepoint,创建基于SavePoint的嵌套事务来实现编程式事务管理。...; 4、如果使用了SpringMVC,SpringMVC容器有没有重复扫描; 业务代码是否吞掉异常; 5、Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException
23.Spring 事务的种类?24.Spring 的事务隔离级别?25.Spring 的事务传播机制?26.声明式事务实现原理了解吗?27.声明式事务在哪些情况下会失效?----什么是事务?...方法进行事务处理,包括开启事务、事务提交、异常回滚。...Spring默认抛出了未检查unchecked异常(继承自 RuntimeException的异常)或者 Error才回滚事务,其他异常不会触发回滚事务。...编辑Spring默认支持的异常回滚// 希望自定义的异常可以进行回滚@Transactional(propagation= Propagation.REQUIRED,rollbackFor= MyException.class...若在目标方法中抛出的异常是 rollbackFor 指定的异常的子类,事务同样会回滚。
将事务标识为只读,只读事务不修改任何数据; 对于JDBC只是简单的将连接设置为只读模式,对于更新将抛出异常; 对于一些其他ORM框架有一些优化作用,如在Hibernate中,Spring事务管理器将执行...setDefaultTimeout(10) 回滚规则 spring事务管理器会捕捉任何未处理的异常,然后依据规则决定是否回滚抛出异常的事务 默认配置下,Spring只有在抛出的异常为运行时unchecked...异常时才回滚该事务,也就是抛出的异常为RuntimeException的子类(Errors也会导致事务回滚),而抛出checked异常则不会导致事务回滚。...可以明确的配置在抛出那些异常时回滚事务,包括checked异常。...,在回滚或提交的时候需要应用对应的事务状态 编程式和声明式事务 Spring提供了对编程式事务和声明式事务的支持,编程式事务允许用户在代码中精确定义事务的边界 而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦
Spring 本身并不实现事务,Spring 事务的本质还是底层数据库对事务的支持,没有数据库事务的支持,Spring 事务就不会生效。...Spring 事务提供了一套抽象的事务管理,并且结合 Spring IOC 和 Spring AOP,简化了应用程序使用数据库事务,并且通过声明式事务,可以做到应用程序无侵入的事务功能。...Spring 事务的本质其实就是 AOP 和 数据库事务,Spring 将数据库的事务操作提取为切面,通过 AOP 的方式增强事务方法。...如果当前没有事务,则抛出异常;如果当前存在事务,加入到这个事务中。...PROPAGATION_NEVER:不能在事务中执行。如果当前没有事务,那么就以非事务的形式执行;如果当前存在事务,则抛出异常。
领取专属 10元无门槛券
手把手带您无忧上云