官方地址
http://seata.io/zh-cn/index.htmlhttp://seata.io/zh-cn/index.html
参考官网即可
使用
1
每个微服务都需要创建 UNDO_LOG 表
SEATA AT 模式需要 UNDO_LOG 表
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| -- 注意此处0.3.0+ 增加唯一索引 ux_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;
|
2
下载seata服务器
从 https://github.com/seata/seata/releaseshttps://github.com/seata/seata/releases,下载服务器软件包,将其解压缩。
3
导入依赖
1 2 3 4
| <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> </dependency>
|
4
registry.conf 注册中心配置文件
file.conf Seata配置
nacos中的seata的注册名字是serveraddr
5
每个服务使用seata 代理数据源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| package com.jhj.gulimall.product.config;
import com.zaxxer.hikari.HikariDataSource; import io.seata.rm.datasource.DataSourceProxy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils;
import javax.sql.DataSource;
@Configuration public class MySeataConfig { @Autowired DataSourceProperties dataSourceProperties;
@Bean public DataSource dataSource(DataSourceProperties dataSourceProperties){ HikariDataSource build = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build(); if (StringUtils.hasText(dataSourceProperties.getName())){ build.setPoolName(dataSourceProperties.getName()); } return new DataSourceProxy(build); } }
|
6
每个微服务将 file.conf register.conf放到resource下
修改每一个file.conf的service.vgroup_mapping 修改为service.vgroup_mapping.${spring.application.name}-fescar-service-group
方式一直接修改file.conf
方式二 配置yml
1 2 3 4 5 6
| spring: cloud: alibaba: seata: tx-service-group: ${ spring.application.name}
|
启动测试
想要做分布式事务的大事务入口方法上加上 @GlobalTransactional 远程调用的小事务 @Transactional
作者声明