面试题:Spring 事务的实现方式和实现原理?
2023-02-18 16:35:55 时间
Spring 事务的实现方式和实现原理
Spring 事务的本质其实就是数据库对事务的支持,没有数据库的事务支持, spring 是无法提供事务功能的。真正的数据库层的事务提交和回滚是通过 binlog 或者 redo log 实现的。
Spring 的事务传播行为:
Spring 事务的传播行为说的是,当多个事务同时存在的时候, Spring 如何 处理这些事务的行为。
- ① PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务, 如果当前存在事务,就加入该事务,该设置是最常用的设置。
- ② PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就 加入该事务,如果当前不存在事务,就以非事务执行。‘
- ③ PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务, 就加入该事务,如果当前不存在事务,就抛出异常。
- ④ PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事 务,都创建新事务。
- ⑤ PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当 前存在事务,就把当前事务挂起。
- ⑥ PROPAGATION_NEVER: 以非事务方式执行,如果当前存在事务,则 抛出异常。
- ⑦ PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。 如果当前没有事务,则按 REQUIRED 属性执行
Spring 中的隔离级别:
- ① ISOLATION_DEFAULT:这是个 PlatfromTransactionManager 默认的隔离级别, 使用数据库默认的事务隔离级别。
- ② ISOLATION_READ_UNCOMMITTED:读未提交,允许另外一个事务可以看到这个 事务未提交的数据。
- ③ ISOLATION_READ_COMMITTED:读已提交,保证一个事务修改的数据提交后才 能被另一事务读取,而且能看到该事务对已有记录的更新。
- ④ ISOLATION_REPEATABLE_READ:可重复读,保证一个事务修改的数据提交后才 能被另一事务读取,但是不能看到该事务对已有记录的更新。
- ⑤ ISOLATION_SERIALIZABLE:一个事务在执行的过程中完全看不到其他事务对数据 库所做的更新。
Spring 事务的种类:
Spring 支持编程式事务管理和声明式事务管理两种方式:
- 编程式事务管理使用 TransactionTemplate。
- 声明式事务管理建立在 AOP 之上的
- ①声明式事务最大的优点就是不需要在业务逻辑代码中掺杂事务管理的代码, 只需在配置文件中做相关的事务规则声明或通过@Transactional 注解的方式, 便可以将事务规则应用到业务逻辑中。
- ②声明式事务管理要优于编程式事务管理,这正是 spring 倡导的非侵入式的 开发方式,使业务代码不受污染,只要加上注解就可以获得完全的事务支持。唯 一不足地方是,最细粒度只能作用到方法级别,无法做到像编程式事务那样可以 作用到代码块级别。
- ③声明式事务本质是通过 AOP 功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
相关文章
- [编程] C语言循环结构计算π的值
- 学习ASP.NET Core Blazor编程系列五——列表页面
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI前端页面框架 (十八)
- 结对编程,到底是双剑合璧还是脚趾抠地?
- 个性化联邦学习算法框架发布,赋能AI药物研发
- 2021年中国DevOps现状调查报告发布!
- 以两种异步模型应用案例,深度解析Future接口
- AI论文解读丨融合视觉、语义、关系多模态信息的文档版面分析架构VSR
- 云图说 | 华为云医疗智能体,智联大健康,AI药物研发
- 带你走进“华为链”
- Vue组件间的传值五大场景,你造吗?
- 初学者入门知识图谱必看的能力:推理
- 带你探索CPU调度的奥秘
- 鸿蒙轻内核定时器Swtmr:不受硬件和数量限制,满足用户需求
- 云图说|云上应用监控神器——应用性能监控APM2.0
- 带你了解弯曲文本检测算法的两种思路:区域重组和像素分割
- 带你认识MindSpore量子机器学习库MindQuantum
- 论文解读丨Zero-Shot场景下的信息结构化提取
- CWE发布2021年最危险的25种软件缺陷
- AI开发者十问:10分钟了解AI开发的基本过程