1、環境配置
下載:https://github.com/seata/seata
2、配置:配置的是 conf下的file.conf與registry.conf
file.conf
由文件的形式改為數據庫的形式工作,所以下面配置的是數據庫信息與最上面的組信息,需要記住這個組名(可自起 *_tx_group)
registry.conf
配置了注冊中心,3333是nacos的一個節點
配置數據庫
"seata" 數據庫
,sql來源:conf > db.store.sql 、版本源碼查看(這里是v1.00) +業務數據庫
3、啟動Seata ,直接文件啟動 root@innor:/usr/local/seata/seata-1.0.0/bin# ./seata-server.sh
4、在項目中配置
依賴:
<!--seata--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> <!-- 因為兼容版本問題,所以需要剔除它自帶的seata的包 --> <exclusions> <exclusion> <artifactId>seata-all</artifactId> <groupId>io.seata</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.seata</groupId> <artifactId>seata-all</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <!--mybatis-plus--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency>
yml
組名與bruid數據源的配置
主啟動類:
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)//取消數據源的自帶創建
...
配置:
//用於Seata的數據源配置 @Configuration public class DataSourceConfig { /** * 從配置文件獲取屬性構造datasource,注意前綴,這里用的是druid,根據自己情況配置, * 原生datasource前綴取"spring.datasource" * * @return */ @ConfigurationProperties(prefix = "spring.datasource") @Bean public DruidDataSource druidDataSource(){ return new DruidDataSource(); } /** * 構造datasource代理對象,替換原來的datasource * * @param druidDataSource * @return */ @Primary @Bean("dataSource") public DataSourceProxy dataSourceProxy(DataSource druidDataSource) { return new DataSourceProxy(druidDataSource); }
}
將file.conf與registry.conf復制到項目的resource下
業務:
在事務操作的服務加上注解,注意OpenFeign不要寫實現方法,因為調用出問題,且沒有后備方法就會報錯,報錯就會使數據回滾。
@GlobalTransactional(name = "fsp-test" , rollbackFor = Exception.class)