Spring-3-掌握Spring事务传播机制

发布于 2024-07-19
847

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

扫码阅读
手机扫码阅读
Spring事务配置学习摘要

Spring事务配置学习摘要

1. Spring事务管理

1.1 Spring事务简介

Spring事务用于在数据层或业务层保障一系列的数据库操作同成功同失败,确保操作的完整性和一致性。

1.2 案例分析Spring事务

通过搭建Spring整合MyBatis的环境,实现两个账户间的转账操作。转账需求包括账户减钱和加钱的操作。当程序出现异常时,事务能够确保操作回滚,以保障整体业务的成功或失败。

1.3 代码实现

具体步骤包括配置数据库表、添加必要的依赖(如Spring、MyBatis、Druid等)、配置数据源和事务管理器(JdbcConfig)、MyBatis的相关配置(MybatisConfig),以及在业务层实现转账逻辑。

在业务层使用注解式事务(@Transactional)管理转账操作。事务注解通常添加在业务层接口上而非实现类,以降低耦合性。

测试结果

在没有事务管理时,转账失败会导致部分操作成功,部分失败;而开启事务后,无论是否出现异常,账户金额都能保持一致性。

2. Spring事务角色

2.1 Spring事务角色解析

Spring事务包括两种角色:事务管理员(通常是业务层开启事务的操作)和事务协调员(通常是数据层方法,也可以是业务层方法)。管理员负责发起事务,协调员负责加入事务。

3. Spring事务相关配置

3.1 @Transactional注解配置

@Transactional注解用于设置事务属性,包括以下内容:

  • readOnly: 设置为只读事务。
  • timeout: 设置事务超时时间。
  • rollbackFor: 指定需要回滚的异常。
  • noRollbackFor: 指定不需要回滚的异常。
  • propagation: 设置事务传播行为。

默认情况下,Spring只对运行时异常(RuntimeException)和错误(Error)进行回滚。非运行时异常需通过rollbackFor手动设置。

3.2 转账业务追加日志

在转账操作中追加日志记录功能。无论转账成功与否,日志均需保留。这通过设置事务传播行为(Propagation.REQUIRES_NEW)实现,确保日志操作在独立事务中执行。

测试结果表明,当日志操作开启新的事务,即使转账失败,日志记录也不会被回滚。

3.3 事务传播行为

Spring事务传播行为用于处理方法间事务的关系。例如,REQUIRED表示加入当前事务,REQUIRES_NEW表示创建新事务。不同的传播属性会影响事务的传递和独立性。

思考题:事务是否会失效?如果失效,可能的原因是什么?这是一个常见的面试问题。

springboot葵花宝典