版本
spring-cloud-alibaba.version=2.2.1.RELEASE
spring-cloud.version=Hoxton.SR7
seata.version=1.3
nacos.version=1.2.1
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
由于部分包未支持Seata1.3,所以需要单独指定
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-seata</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.3.0</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
<version>1.3.0</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</exclusion>
</exclusions>
</dependency>
<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>
环境准备
Nacos
Seata
数据表:https://github.com/seata/seata/blob/1.2.0/script/server/db/mysql.sql
我使用docker-compose,晚点回补充全部文件
seata-server:
image: seataio/seata-server:1.3.0
environment:
#STORE_MODE: db
SEATA_CONFIG_NAME: file:/seata-server/config/registry
SEATA_IP: 10.0.1.103
#registry.type: nacos
volumes:
- "./seata-server/config:/seata-server/config"
ports:
- "8091:8091"
nacos:
image: nacos/nacos-server:1.2.1
environment:
- PREFER_HOST_MODE=hostname
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=mysql
- MYSQL_SERVICE_DB_NAME=nacos_v12
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=nacos
- MYSQL_SERVICE_PASSWORD=nacos
- NACOS_AUTH_SYSTEM_TYPE=mysql
- JAVA_OPT=-Dnacos.core.auth.enabled=true -Dnacos.core.auth.system.type=nacos
volumes:
- ./nacos/logs:/home/nacos/logs
- ./nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8848:8848"
depends_on:
- mysql
数据准备
Nacos
创建namespace=test,创建用户username=test,password=test2020,注意授权为读写状态(需要同步Seata-server的配置文件)
Seata-Server
配置registry.conf ```java registry { type = “nacos”
nacos { application = “seata-server” serverAddr = “10.0.1.103:8848” namespace = “test” cluster = “default” username = “test” password = “test2020” } file { name = “file:/seata-server/config/file.conf” } }
config { type = “nacos”
nacos { serverAddr = “10.0.1.103:8848” namespace = “test” group = “SEATA_GROUP” username = “test” password = “test2020” }
file { name = “file:/seata-server/config/file.conf” } }
同步配置到Nacos(可以参考官网)
<a name="fn0CD"></a>
## SpringCloud应用配置
**特别注意:应用中的配置需要和seata-server启动配置registry.conf需要保持一致**<br />bootstrap.properties
```java
spring.application.name=app-api
#
spring.profiles.active=dev
#
spring.cloud.nacos.username=test
spring.cloud.nacos.password=test2020
spring.cloud.nacos.config.server-addr=10.0.1.103:8848
spring.cloud.nacos.discovery.server-addr=10.0.1.103:8848
spring.cloud.nacos.config.file-extension=yml
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.namespace=test
spring.cloud.nacos.discovery.namespace=test
在Nacos增加配置
由于指定spring.profiles.active=dev,所以dataId=app-api-dev.yml
seata:
enabled: true
application-id: applicationName
tx-service-group: my_test_tx_group
enable-auto-data-source-proxy: false #一定要是false
service:
vgroup-mapping:
my_test_tx_group: default #key与上面的tx-service-group的值对应
# config和registry中的信息与register.conf中配置保持一致
config:
type: nacos
nacos:
serverAddr: 10.0.1.103:8848
namespace: test
group: SEATA_GROUP
username: test
password: test2020
registry:
type: nacos
nacos: #这里配置的是seata-server的注册信息
application: seata-server
serverAddr: 10.0.1.103:8848
namespace: test
group: DEFAULT_GROUP
cluster: default
username: test
password: test2020
踩坑
docker未指定IP,导致应用无法连接
docker 指定运行参数 SEATA_IP: 10.0.1.103
配置版本名称变更
1.0.0 版本配置项seata.service.grouplist 在1.1.0 更改为:seata.service.grouplist.default其中 default 代表 seata注册服务名。
seata.service.grouplist.default内容为seata-server服务的地址,例如
10.0.1.103:8091