Spring事务管理高频面试题及详细答案_第1页
Spring事务管理高频面试题及详细答案_第2页
Spring事务管理高频面试题及详细答案_第3页
Spring事务管理高频面试题及详细答案_第4页
Spring事务管理高频面试题及详细答案_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Spring事务管理高频面试题及详细答案1、什么是Spring事务?为什么要用Spring事务?参考答案:Spring事务是Spring框架对数据库事务的统一封装管理,核心是保证数据库操作的原子性、一致性、隔离性、持久性,也就是ACID特性。原生JDBC事务需要手动开启、提交、回滚、关闭连接,代码冗余度极高,且事务管控不灵活。而Spring事务通过声明式、编程式两种方式,简化事务开发,统一事务管理规范,还能适配不同的数据库、ORM框架(MyBatis、JPA等)。核心使用目的:避免业务操作中出现部分成功、部分失败的数据不一致问题,比如转账、订单创建、库存扣减等核心业务,确保一组数据库操作要么全部成功,要么全部回滚。2、Spring事务的两种实现方式?各自优缺点?参考答案:Spring事务分为编程式事务和声明式事务两种。(1)编程式事务手动通过代码控制事务的开启、提交、回滚,核心使用TransactionTemplate或者PlatformTransactionManager实现。优点:粒度细,可以精准控制某几行代码的事务范围,灵活性极高。缺点:代码侵入性强,业务代码和事务代码耦合,冗余代码多,实际项目中极少使用。(2)声明式事务基于AOP实现,通过注解(@Transactional)或者XML配置实现事务管理,无需手动写事务控制代码。优点:无代码侵入,业务代码干净简洁,配置简单,项目主流使用方式。缺点:事务粒度只能控制在方法级别,无法针对代码行控制;依赖AOP动态代理,存在部分事务失效场景。3、@Transactional注解的常用属性有哪些?分别作用是什么?参考答案:这是面试高频考点,核心常用属性如下:propagation(传播机制):核心属性,指定事务的传播行为,解决多方法嵌套调用时的事务传递问题。isolation(隔离级别):设置数据库事务隔离级别,解决并发事务带来的脏读、不可重复读、幻读问题。timeout(超时时间):事务超时时间,单位秒,超时后自动回滚,默认-1(永不超时)。readOnly(只读):设置事务是否为只读事务,true时只能查询,不能增删改,可优化数据库性能。rollbackFor:指定触发事务回滚的异常类型,默认只回滚RuntimeException和Error,检查异常不回滚。noRollbackFor:指定某些异常触发时,事务不回滚。4、Spring事务的7种传播机制?日常常用的有哪些?参考答案:事务传播机制是指当一个带有事务的方法被另一个方法调用时,事务如何传递,一共7种,重点掌握5种常用的。常用核心传播机制REQUIRED(默认):最常用。如果当前有事务,就加入当前事务;如果没有,就新建一个事务。所有业务增删改方法默认使用该机制。SUPPORTS:支持事务。当前有事务就加入,没有就以非事务方式运行。常用于查询方法。MANDATORY:强制事务。必须在已有事务中运行,没有事务就直接报错。REQUIRES_NEW:新建独立事务。无论当前是否有事务,都会新建一个全新的独立事务,旧事务会被挂起,新事务执行完毕再恢复旧事务。常用于日志记录、异步兜底操作,保证自身执行成功不受主事务影响。NOT_SUPPORTED:始终以非事务方式运行,如果当前有事务,直接挂起。极少用到的两种NEVER:强制非事务,检测到当前有事务直接报错。NESTED:嵌套事务。当前有事务则嵌套在父事务中,有独立的保存点,可局部回滚;无事务则新建事务。和REQUIRES_NEW的区别是,嵌套事务依赖父事务,父事务回滚,子事务必须回滚;而独立事务互不影响。5、数据库四大隔离级别?Spring对应的隔离级别?各自解决什么问题?参考答案:并发事务会产生三大问题:脏读、不可重复读、幻读,隔离级别从低到高依次解决对应问题,隔离级别越高,并发性能越低。READ_UNCOMMITTED(读未提交):最低级别,可读取未提交的数据,会产生脏读、不可重复读、幻读,项目基本不用。READ_COMMITTED(读已提交):Oracle默认级别。只能读取已提交的数据,解决脏读,存在不可重复读、幻读问题。REPEATABLE_READ(可重复读):MySQLInnoDB默认级别。解决脏读、不可重复读,存在幻读问题。InnoDB通过间隙锁极大降低了幻读概率。SERIALIZABLE(串行化):最高级别,事务串行执行,解决所有并发问题,但性能极差,几乎不用。Spring事务隔离级别和数据库完全对应,日常开发无需手动修改,使用数据库默认级别即可。6、Spring事务默认什么时候回滚?哪些异常不会回滚?参考答案:Spring声明式事务默认只对RuntimeException(运行时异常)和Error(系统错误)回滚。对于受检异常(CheckedException,也就是必须try-catch捕获的异常,如IOException、SQLException),默认不会触发事务回滚。解决方案:在@Transactional注解中手动指定rollbackFor属性,统一所有异常回滚:@Transactional(rollbackFor=Exception.class)7、Spring事务失效的10种常见场景(面试重点)参考答案:Spring事务基于AOP动态代理实现,所有失效场景本质都是没有走代理对象的方法,导致事务切面无法拦截,事务逻辑无法执行。常见场景如下:方法不是public修饰:SpringAOP只能拦截public方法,private、protected、default方法上加@Transactional完全无效。同类方法内部调用:A方法(无事务)调用本类带@Transactional的B方法,事务失效。因为内部调用用的是this原生对象,不是Spring代理对象。异常被手动try-catch捕获:方法内异常被自己捕获,没有抛出到方法外,事务切面检测不到异常,不会触发回滚。抛出受检异常,未指定rollbackFor:默认不回滚受检异常,导致数据不一致。事务传播机制配置错误:比如嵌套方法配置NOT_SUPPORTED、NEVER,会强制取消事务。数据库引擎不支持事务:MySQLMyISAM引擎不支持事务,只有InnoDB支持,表引擎错误导致事务无效。只读事务执行增删改操作:readOnly=true时执行修改操作,直接报错、事务失效。事务超时:执行时间超过timeout设置,事务自动回滚失效。多线程场景:Spring事务是线程级别的,父线程开启事务,子线程无法共享事务,子线程操作不参与事务。静态方法、final方法加事务:静态方法、final方法无法被动态代理重写,事务无法生效。8、同类内部调用事务失效怎么解决?参考答案:核心思路:绕过this调用,使用Spring代理对象调用方法,让AOP切面可以拦截。三种常用解决方案:手动从Spring容器获取当前Bean,通过Bean调用内部方法,避免this调用。使用AopContext.currentProxy()获取当前代理对象,调用本类事务方法,最简单常用。拆分方法:将事务方法抽离到新的Service类中,通过类注入调用,彻底避免内部调用问题(项目最推荐、最规范)。9、REQUIRES_NEW和NESTED传播机制的核心区别?参考答案:两者看起来都是新开事务,核心差异在事务独立性和回滚规则:1、REQUIRES_NEW完全独立的两个事务,父事务和子事务互不影响:子事务回滚,不会影响父事务提交;父事务回滚,不会影响已执行完成的子事务;执行子事务时,父事务会被完全挂起。2、NESTED嵌套事务,子事务依赖父事务:子事务有独立保存点,子事务异常可单独回滚,不影响父事务;父事务一旦回滚,子事务必须全部回滚,无法独立保留;不会挂起父事务,属于同一个大事务的分支。10、Spring事务的底层原理是什么?参考答案:Spring声明式事务底层核心是SpringAOP动态代理+JDBC事务。执行流程:项目启动时,Spring扫描带有@Transactional注解的类和方法,为其生成JDK动态代理或CGLIB代理对象;方法调用时,进入AOP事务切面(TransactionInterceptor);切面根据事务传播机制、隔离级别等配置,通过事务管理器PlatformTransactionManager开启事务、绑定数据库连接;执行目标业务方法;方法正常执行完毕,切面提交事务、释放连接;方法抛出指定异常,切面拦截异常,执行事务回滚操作。简单来说:事务不是Spring独创的,是对JDBC原生事务的AOP封装,通过代理实现自动化事务管控。11、多线程下Spring事务会有什么问题?怎么解决?参考答案:Spring事务是基于ThreadLocal实现的,事务和当前线程绑定,父线程的事务上下文无法传递给子线程。问题:主线程开启事务,子线程执行的数据库操作不在同一个事务中,主线程回滚,子线程数据不会回滚,出现数据不一致。解决方案:核心业务需要事务一致性的场景,禁止多线程拆分事务操作;非核心、允许数据最终一致的场景,可手动编程式事务,手动传递连接,不推荐常规使用;异步、并行操作尽量做事务解耦,每个子线程独立事务。12、大事务问题怎么优化?(面试进阶)参考答案:大事务指事务执行时间过长、包含过多数据库操作,会导致数据库连接占用、锁等待、死锁、超时、数据库性能下降等问题。优化方案:缩小事务范围:将

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论