因为 Seata 针对不同框架在具体安装上会有点差异,所以本文章部分安装步骤或配置是仅针对 Nacos Spring Cloud 框架和 MySQL 数据库以及个别框架的特定版本。
安装 Seata 服务端
步骤一:在数据库中运行该文件
v1.4.2 seata/script/server/db/mysql.sql
运行完后数据库中有以下几张表:
表名 | 说明 |
---|---|
global_table | 全局事务 |
branch_table | 分支事务 |
lock_table | 全局锁 |
步骤二:下载安装包并解压
官方下载链接 github.com/seata/seata…
步骤三:修改解压后的配置文件
打开文件 conf/file.conf
修改mode以及数据库连接信息
步骤四:修改解压后的注册文件
打开文件 conf/registry.conf
修改type和nacos信息
步骤五:运行启动脚本
运行脚本 bin/seata-server.bat
启动成功后在 nacos 中可以看到服务
安装 Seata 客户端
步骤一:在数据库中运行SQL文件
v1.4.2 seata/script/client/at/db
运行完后数据库中有以下几张表:
表名 | 说明 |
---|---|
undo_log |
步骤二:MAVEN项目里添加依赖
...
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring.boot.version>2.6.3</spring.boot.version>
<spring.cloud.version>2021.0.1</spring.cloud.version>
<alibaba.cloud.version>2021.0.1.0</alibaba.cloud.version>
<spring-cloud-starter-alibaba-seata.version>2021.0.1.0</spring-cloud-starter-alibaba-seata.version>
<seata-spring-boot-starter.version>1.4.2</seata-spring-boot-starter.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Spring boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Seata -->
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>${seata-spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>${spring-cloud-starter-alibaba-seata.version}</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 此处使用阿里云maven仓库避免网络问题加载依赖失败 -->
<repositories>
<repository>
<id>aliyunmaven</id>
<name>aliyunmaven</name>
<url>https://maven.aliyun.com/repository/central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
...
复制代码
步骤三:修改 bootstrap.yml 文件
spring:
application:
# 服务名称,可以自定义名称替换 xxxx-service
name: xxxx-service
复制代码
步骤四:修改 application.yml 文件
# 服务端口
server:
port: 8080
spring:
cloud:
nacos:
# nacos地址
discovery:
server-addr: 127.0.0.1:8848
alibaba:
seata:
# 此处的值跟下一步骤里的 Nacos 配置对应
tx-service-group: seata-tx-service-group
seata:
# 分布式事务模式
data-source-proxy-mode: AT
config:
type: nacos
# 根据实际情况修改
nacos:
server-addr: 127.0.0.1:8848
group: "DEFAULT_GROUP"
复制代码
步骤五:修改 NACOS 配置列表
Data id | 配置内容 |
---|---|
service.vgroupMapping.seata-tx-service-group | seata-tx-service-group |
service.seata-tx-service-group.grouplist | 127.0.0.1:8091 |
使用 Seata 分布式事务
根据实际情况自定义Spring Boot启动类
@EnableDiscoveryClient
@EnableAutoConfiguration
@SpringBootApplication
public class ExampleApplication {
public static void main(String[] args) {
SpringApplication.run(ExampleApplication.class);
}
}
复制代码
需要分布式事务的场景加上GlobalTransactiona注解
@GlobalTransactional(rollbackFor = Exception.class)
public xxxx xxxx(...) {
...
}
复制代码
启动客户端成功后则可以看到以下日志
register TM success. client version:1.4.2, server version:1.4.2 ...
复制代码
参考资料和链接
- 官方新手部署指南 seata.io/zh-cn/docs/…
- 查看框架版本说明 github.com/alibaba/spr…