1、Seata简介
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
文档地址:http://seata.io/zh-cn/docs/overview/what-is-seata.html
2、使用前提
基于支持本地 ACID 事务的关系型数据库。Java 应用,通过 JDBC 访问数据库。即具有InnoDB引擎的MySQL。
3、创建UNDO_LOG 表
日志回滚记录表
CREATE TABLE `undo_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,`ext` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
4、pom.xml添加引用
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency>
通过Maven包查看当前导入seata服务器版本

到https://github.com/seata/seata/releases下载指定版本。
5、Seata配置
调整当前注册中心和配置存放的地方。
registry.conf :注册中心配置,直接将服务配置在nacos
file.conf:配置存放的地方。

6、调整Seata微服务数据源使用代理
@Configurationpublic class MySeataConfig {@AutowiredDataSourceProperties dataSourceProperties;@Beanpublic DataSource dataSource(DataSourceProperties properties){HikariDataSource dataSource = properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();if(StringUtils.hasText(properties.getName())){dataSource.setPoolName(properties.getName());}return new DataSourceProxy(dataSource);}}
将当前的注册配置和文件配置拷贝到当前项目底下。
file.conf 的 service.vgroup_mapping 配置必须和spring.application.name一致在 org.springframework.cloud:spring-cloud-starter-alibaba-seata的org.springframework.cloud.alibaba.seata.GlobalTransactionAutoConfiguration类中,默认会使用 ${spring.application.name}-fescar-service-group作为服务名注册到 Seata Server上,如果和file.conf中的配置不一致,会提示 no available server to connect错误
也可以通过配置 spring.cloud.alibaba.seata.tx-service-group修改后缀,但是必须和file.conf中的配置保持一致

7、开启远程事务
给大事务添加全局的事务管理@GlobalTransactional
给小事务添加@Transactional
@GlobalTransactional@Transactional@Overridepublic void addStock(Long skuId, Long wareId, Integer skuNum) {}




