面试题: 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. 如果方法执行成功,则事务会被提交;如果方法执行失败,则事务会被回滚。
相关推荐
风象南10 分钟前
SpringBoot中3种条件装配技术
java·spring boot·后端
Java小白中的菜鸟13 分钟前
深入理解Java反射
java·开发语言
自由与自然15 分钟前
乐观锁与悲观锁的使用场景
java·服务器·数据库
爱的叹息3 小时前
spring mvc 中 RestTemplate 全面详解及示例
java·spring·mvc
.生产的驴7 小时前
SpringBoot 接口限流Lua脚本接合Redis 服务熔断 自定义注解 接口保护
java·大数据·数据库·spring boot·redis·后端·lua
一切皆有迹可循7 小时前
SpringBoot整合MinIO快速入门:实现分布式文件存储与管理
spring boot·分布式·后端
洛可可白8 小时前
Spring Boot中自定义注解的创建与使用
java·spring boot·后端
Alkaid:9 小时前
解决Long类型前端精度丢失和正常传回后端问题
java·前端·javascript·vue.js
唐人街都是苦瓜脸9 小时前
Java RPC 框架是什么
java·开发语言·rpc
追逐时光者9 小时前
一款 .NET 开源、免费、轻量级且非侵入性的防火墙软件
后端·.net