date: 2022-04-25
categories: [java, 編程]
tags: [分布式事務]
概述
多數據源單服務寫入, 分布式事務實現
使用隨機數控制產生異常
注: 網上很多都是只有多數據源配置,實際不能控制事務統一回滾,
單服務場景下如果多個數據源只有一個寫,剩下都是讀, 則不需要分布式事務
為減少篇幅,詳細代碼在代碼倉庫,可自行參考
版本
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
代碼
本文摘自 :https://www.cnblogs.com/