Spring-3-掌握Spring事务传播机制
847
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
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葵花宝典
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
白皮书上线