比如:一个方法影响三个服务三个数据库
实现分布式事务
创建事务服务模块
heima-leadnews-seata
分别向三个服务引入pom依赖
<dependency>
<groupId>com.heima</groupId>
<artifactId>heima-leadnews-seata</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
分别向三个服务添加seata配置
spring:
application:
name: leadnews-wemedia
cloud:
alibaba:
seata:
tx-service-group: ${spring.application.name}_tx_group
分别向需要事务的三个服务 config文件下创建SeataConfig类
@Configuration
@ComponentScan("com.heima.seata.config") //扫描事务服务模块config文件下配置
public class SeataConfig {
}
分别向三个服务resources文件下添加file.conf和registry.conf
这两个文件在seata安装包中
并修改配置信息file.conf文件第26行 最好设置为服务名leadnews-user_tx_group
在需要事务的方法上添加注解
@GlobalTransactional
在每个涉及到事务的数据库中添加表
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;