面试题: Spring中的事务是如何实现的?

Spring中的事务是如何实现的?

背景

个人原因的背景

想换工作, 刷面试题看到的问题, 简单记录一下, 算是个人学习的输出, 方便后续回顾, 也加深印象.

2024年11月14日09:32:49: 感觉我只看面试题, 完全看不进去. 通过不让自己手闲下来的方式, 促进一下我找工作的进程.

正规一点的背景

事务是确保数据的一致性和完整性. 还是很关键的. 面试也喜欢问.

答案

  1. Spring 事务底层是基于数据库事务和AOP机制实现的.
  2. 首先对于使用了@Transaction注解的Bean, Spring 会创建一个代理对象作为Bean
  3. 当调用代理对象的方法时, 会判断该方法上是否加了 @Transaction 注解
  4. 如果加了, 那么则利用事务管理器创建一个数据库连接
  5. 并且修改数据库连接的autocommit 属性为false, 禁止此事务自动提交, 这是Spring事务非常重要的一步.
  6. 然后执行当前方法, 方法中会执行SQL
  7. 执行完当前方法后, 如果没有出现一异常就直接提交事务.
  8. 如果出现了异常, 并且这个异常是需要回滚的, 就会回滚事务, 否则仍然提交事务.
  9. Spring事务的隔离级别对应的就是数据库的隔离级别
  10. Spring事务的传播机制就是Spring事务自己实现的, 也是Spring事务中最复杂的
  11. Spring事务的传播机制是基于数据库连接来做的, 一个数据库连接一个事务, 如果传播机制配置为需要新开一个事务, 那么实际上就是先创立一个数据库连接, 在此新数据库连接上执行SQL.

一些思绪和灵感

Q: 事务为了解决什么问题?

A: 如果程序中途出现的异常, 事务可以进行数据的回滚.

Q: 为什么事务很关键?

A: 事务的控制

Q: 分布式系统, 怎么做事务的管理?

A: 就是分布式事务. 系统A告诉系统B: 你需要回滚. 但是系统B: 我都一直处理完了, 怎么回滚?

Q: Spring事务的隔离级别, MySQL的事务隔离级别?

A: 应该有一个枚举, 就是和市面的数据库产品对应的吧.

Q: 程序中有哪几种事务的方式:

A: 我知道的有两种:

1.Spring注解的方式

2.编程式事务

个人理解程度

Spring的事务是通过@Transcation注解实现的, 其底层原理就是利用了AOP, 面向切面的技术.

autocommit 先关闭掉. 如果出现了需要回滚的异常, 就会执行回滚操作, 否则直接提交事务.

隔离级别和数据库的隔离级别保持一致.

传播机制, 是Spring自己去实现的, 我们一般都是用得默认的传播机制.

拓展知识

Spring的事务管理主要涉及哪几个类?

  1. PlatformTransactionManager:事务管理器,负责事务的创建、提交和回滚等操作。
  2. TransactionDefinition:事务定义,用于指定事务的属性,如隔离级别、传播行为等。
  3. TransactionStatus:事务状态,用于记录事务的生命周期状态,如是否已经提交或回滚等。
  4. TransactionProxyFactoryBean:代理工厂Bean,用于创建代理对象。
  5. MethodInterceptor:方法拦截器,用于在方法执行前后添加事务管理的逻辑。

在Spring中,事务管理的流程是怎样的?

  1. 当一个方法被标记为@Transactional时,Spring会创建一个代理对象来执行该方法。
  2. 代理对象会在方法执行前后添加事务管理的逻辑,包括事务的开始、提交或回滚等操作。
  3. 如果方法执行成功,则事务会被提交;如果方法执行失败,则事务会被回滚。
相关推荐
码事漫谈5 分钟前
C++死锁深度解析:从成因到预防与避免
后端
凌波粒6 分钟前
MyBatis完整教程IDEA版(2)--ResultMap/注解/一对多/多对一/lombok/log4j
java·intellij-idea·mybatis
码事漫谈10 分钟前
智能体颠覆教育行业:现状、应用与未来展望调研报告
后端
蓝-萧12 分钟前
【玩转全栈】----Django基本配置和介绍
java·后端
priority_key12 分钟前
排序算法:堆排序、快速排序、归并排序
java·后端·算法·排序算法·归并排序·堆排序·快速排序
韩立学长12 分钟前
基于Springboot的旧时月历史论坛4099k6s9(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
葡萄城技术团队1 小时前
迎接下一代 React 框架:Next.js 16 核心能力解读
javascript·spring·react.js
汤姆yu1 小时前
基于SpringBoot的动漫周边商场系统的设计与开发
java·spring boot·后端
皮皮林5512 小时前
快速解决 Maven 版本冲突指南 !
java·maven
灰小猿2 小时前
Spring前后端分离项目时间格式转换问题全局配置解决
java·前端·后端·spring·spring cloud