本地事务
小于 1 分钟
分布式架构任务分为两种,本地事务
和 分布式事务
,不同的场景下我们使用不同的方案。
何时可以使用 Spring 本地事务?
需要满足以下条件才能使用本地事务(即:@Transactional
注解):
- 没有任何 RPC 调用,或 RPC 调用模块无事务(例如:调用的模块只做查询操作,或无数据库操作)
- 同时对多张表进行添加、删除或修改操作
- 本次逻辑(线程)中不需要切换数据源(PS:开启事务后将无法切换数据源)
切换数据源场景下如何使用事务?
有些特性的情况可能需要在线程中切换数据源,但是使用 spring 事务后是无法切换数据源的,这时我们可以使用 @DSTransactional
注解来实现本地事务回滚
注意
@DSTransactional
和 @Transactional
不能混用,即:以下两种情况均不可出现
- 先使用的
@Transational
内部方法调用了本地@DSTransactional
- 先使用的本地
@DSTransactional
内部方法调用了@Transational