面试题: 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. 如果方法执行成功,则事务会被提交;如果方法执行失败,则事务会被回滚。
相关推荐
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
红尘散仙4 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
来杯@Java5 小时前
图书管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·mybatis·课程设计
卷毛的技术笔记6 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
编程大师哥6 小时前
匿名函数 lambda + 高阶函数
java·python·算法
会编程的土豆6 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木6 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
adrninistrat0r6 小时前
Java调用链MCP分析工具
java·python·ai编程
喵个咪6 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
噜噜噜阿鲁~7 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言