spring boot 2.x+mybatis-plus+多源数据库实现分布式事务
上一篇说到利用AOP通过注解方式实现多源数据库的动态切换,本篇文章为大家讲解在多数据源下实现分布式事务
在实际开发中,我们会遇到一个service中实现多个库的CRUD,但是我spring 提供的事务注解只支持单库,这时候如果我们遇到A库表插入成功,B库表插入失败,但是数据不会回滚,在A表容易产生脏数据。这种情况下就很需要分布式事务在分别处理。spring+boot的分布式事务我们利用jta来实现分布式事务
首先导入依赖
<!-- JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jta-atomikos</artifactId>
</dependency>
JTA的优点就是能够支持多数据库事务同时事务管理,满足分布式系统中的数据的一致性.但是也有对应的弊端:
- 两阶段提交
- 事务时间太长,锁数据太长
- 低性能,低吞吐量
具体不懂的可以百度2PC和3PC阶段性提交
-----------------------------------------------华丽的分割线-----------------------------------------------