Spring事务管理
一、事务的4大特性:
原子性、一致性、隔离性、持久性,简称为 ACID 特性
二、事务的管理方式:
1、编程式事务管理 :编程式事务管理是通过编写代码实现的事务管理。可以根据需求规定事务从哪里开始,到哪里结束,拥有很高的灵活性。但是这种方式,会使业务代码与事务规则高度耦合,难以维护,因此我们很少使用这种方式对事务进行管理。所以,本文给大家介绍的是如何使用声明式事务管理。
2、声明式: 声明式事务管理可以通过 2 种方式实现,分别是 XML和注解方式。Spring 在进行声明式事务管理时,底层使用了 AOP 。
三、事务管理器
Spring 提供了一个 PlatformTransactionManager 接口,这个接口被称为 Spring 的事务管理器。这个接口针对不同的框架提供了不同的实现类
实现类 | 说明 |
org.springframework.jdbc.datasource.DataSourceTransactionManager | 提供给 Spring JDBC 、MBatis 的事务管理器 |
org.springframework.orm.hibernate5.HibernateTransactionManager | 提供给 Hibernate 的事务管理器 |
这些实现类,需要导入对应的依赖才能看到。 该接口中还有两个对象,分别是 TransactionDefinition 和 TransactionStatus
四、TransactionDefinition
事务定义,定义了事务的名称,传播属性,事务隔离级别,是否只读,超时时间。
五、TransactionStatus
事务状态,保存了事务执行过程中的状态。
六、事务的传播行为
定义: 多个事务之间方法在调用时,这个过程中事务应该如何进行管理。事务A方法在调用事务B方法时,B事务是在A方法中执行呢还是单独另开一个事务,这个是有被调用这B的事务的传播行为决定的。
分类:7种传播行为
行为 | 说明 |
REQUIRED | 如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行 |
SUPPORTS | 如果有事务在运行,当前的方法就在这个事务内运行;如果当前没有事务,则以非事务的方式运行。 |
MANDATORY | 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。 |
REQUIRES_NEW | 当前的方法必须启动新事务,并在它自己的事务内运行,如果有事务正在运行,应该将它挂起 |
NOT_SUPPORTED | 以非事务方式运行,如果当前存在事务,则把当前事务挂起 |
NEVER | 以非事务方式运行,如果当前存在事务,则抛出异常。 |
NESTED | 如果当前存在事务,则创建一个新事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 REQUIRED。 |
根据上面的描述,我们可以将行为分为三大类。
- 不要事务:NEVER、NOT_SUPPORTED。
- 如果有则用:SUPPORTS
- 必须使用事务:REQUIRED、REQUIRES_NEW、NESTED、MANDATORY
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)