版本

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,所以需要单独指定

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-alibaba-seata</artifactId>
  4. <version>2.2.0.RELEASE</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>io.seata</groupId>
  8. <artifactId>seata-spring-boot-starter</artifactId>
  9. <version>1.3.0</version>
  10. <exclusions>
  11. <exclusion>
  12. <groupId>com.alibaba</groupId>
  13. <artifactId>druid</artifactId>
  14. </exclusion>
  15. </exclusions>
  16. </dependency>
  17. <dependency>
  18. <groupId>io.seata</groupId>
  19. <artifactId>seata-all</artifactId>
  20. <version>1.3.0</version>
  21. <exclusions>
  22. <exclusion>
  23. <groupId>com.alibaba</groupId>
  24. <artifactId>druid</artifactId>
  25. </exclusion>
  26. </exclusions>
  27. </dependency>
  28. <dependency>
  29. <groupId>com.alibaba.cloud</groupId>
  30. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>com.alibaba.cloud</groupId>
  34. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  35. </dependency>

环境准备

Nacos

Seata

数据表:https://github.com/seata/seata/blob/1.2.0/script/server/db/mysql.sql
我使用docker-compose,晚点回补充全部文件

  1. seata-server:
  2. image: seataio/seata-server:1.3.0
  3. environment:
  4. #STORE_MODE: db
  5. SEATA_CONFIG_NAME: file:/seata-server/config/registry
  6. SEATA_IP: 10.0.1.103
  7. #registry.type: nacos
  8. volumes:
  9. - "./seata-server/config:/seata-server/config"
  10. ports:
  11. - "8091:8091"
  12. nacos:
  13. image: nacos/nacos-server:1.2.1
  14. environment:
  15. - PREFER_HOST_MODE=hostname
  16. - MODE=standalone
  17. - SPRING_DATASOURCE_PLATFORM=mysql
  18. - MYSQL_SERVICE_HOST=mysql
  19. - MYSQL_SERVICE_DB_NAME=nacos_v12
  20. - MYSQL_SERVICE_PORT=3306
  21. - MYSQL_SERVICE_USER=nacos
  22. - MYSQL_SERVICE_PASSWORD=nacos
  23. - NACOS_AUTH_SYSTEM_TYPE=mysql
  24. - JAVA_OPT=-Dnacos.core.auth.enabled=true -Dnacos.core.auth.system.type=nacos
  25. volumes:
  26. - ./nacos/logs:/home/nacos/logs
  27. - ./nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
  28. ports:
  29. - "8848:8848"
  30. depends_on:
  31. - mysql

数据准备

Nacos

  1. 创建namespace=test,创建用户username=test,password=test2020,注意授权为读写状态(需要同步Seata-server的配置文件)

    Seata-Server

  2. 配置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” } }

  1. 同步配置到Nacos(可以参考官网)
  2. <a name="fn0CD"></a>
  3. ## SpringCloud应用配置
  4. **特别注意:应用中的配置需要和seata-server启动配置registry.conf需要保持一致**<br />bootstrap.properties
  5. ```java
  6. spring.application.name=app-api
  7. #
  8. spring.profiles.active=dev
  9. #
  10. spring.cloud.nacos.username=test
  11. spring.cloud.nacos.password=test2020
  12. spring.cloud.nacos.config.server-addr=10.0.1.103:8848
  13. spring.cloud.nacos.discovery.server-addr=10.0.1.103:8848
  14. spring.cloud.nacos.config.file-extension=yml
  15. spring.cloud.nacos.config.group=DEFAULT_GROUP
  16. spring.cloud.nacos.config.namespace=test
  17. spring.cloud.nacos.discovery.namespace=test

在Nacos增加配置
由于指定spring.profiles.active=dev,所以dataId=app-api-dev.yml

  1. seata:
  2. enabled: true
  3. application-id: applicationName
  4. tx-service-group: my_test_tx_group
  5. enable-auto-data-source-proxy: false #一定要是false
  6. service:
  7. vgroup-mapping:
  8. my_test_tx_group: default #key与上面的tx-service-group的值对应
  9. # configregistry中的信息与register.conf中配置保持一致
  10. config:
  11. type: nacos
  12. nacos:
  13. serverAddr: 10.0.1.103:8848
  14. namespace: test
  15. group: SEATA_GROUP
  16. username: test
  17. password: test2020
  18. registry:
  19. type: nacos
  20. nacos: #这里配置的是seata-server的注册信息
  21. application: seata-server
  22. serverAddr: 10.0.1.103:8848
  23. namespace: test
  24. group: DEFAULT_GROUP
  25. cluster: default
  26. username: test
  27. 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

应用中的配置需要和seata-server启动配置registry.conf需要保持一致