概述
多数据源单服务写入, 分布式事务实现
应用随机数管制产生异样
**注: 网上很多都是只有多数据源配置,理论不能管制事务对立回滚,
单服务场景下如果多个数据源只有一个写,剩下都是读, 则不须要分布式事务**
为缩小篇幅,具体代码在代码仓库,可自行参考
版本
springboot 2.1.7.RELEASE
配置引入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jta-atomikos</artifactId></dependency>
减少配置类
AtomikosJtaPlatform
JPAAtomikosTransactionConfig Atomikos事务配置类
PrimaryConfig 主数据源配置
SecondaryConfig 其它数据源配置
数据对象实现
User
减少仓储实现
须要别离实现primary和secondary, 从而反对多个数据源拜访
PrimaryUserRepository
SecondaryUserRepository
实现服务类
PrimaryUserService
SecondaryUserService
ExampleService
负责对立调用 PrimaryUserService 和 SecondaryUserService,
模仿一个服务同时拜访多个服务类(每个服务类援用了不同数据源)
如果其中某个服务抛出异样,则整个事务回滚, \@Transactional(rollbackOn =
Exception.class) 是必须的
测试
com.example.springbootatomikos.services.UserServiceTest#testSave
代码
github地址
gitee地址