seata是笔者遇到的spring技术栈中配置比较麻烦的一个,而且按官方案例都不一定成功,有不少错误产生。所以这里记录一下:
本文选择seata 1.3.0版本,项目添加依赖也是这个版本。Release v1.3.0 · seata/seata · GitHub
配置seata服务端: 下载seata-server和source code。 解压ource code,找到script文件里config-center文件,修改config.txt
...
service.vgroup-mapping.my_test_tx_group=default
...
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata_server?useUnicode=true&serverTimezone=UTC
store.db.user=root
store.db.password=123456
...
注意把vgroupMapping改成vgroup-mapping这是seata版本的问题。 新建nacos命名空间seata 运行写入配置中心:
sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t seata_namespace_id -u nacos -w nacos
打开script->server->db将里面mysql.sql写入seata_server数据库
将seata-server解压找到conf,按照官网配置file.conf和registry.conf,模式db,类型nacos, 命名空间同为seata_namespace_id。
启动seata-server服务。
然后配置seata-client服务,首先说明按照官网配置,不像其他技术栈那么简单明了,笔者尝试多种方法有不少坑要踩,另外还结合了官方给出的案例:https://github.com/seata/seata-samples/
找到里面的springcloud-nacos-seata文件,我们可以拿它的stock和order模块测试,在需要用到seata服务的不同库里我们都需要引入undo_log这个表,建表语句在官网和给出案例的readme.md里都能容易找到。 遗憾是按照其案例配置依然会报错,这大概和最新依赖配置不能匹配,所以按照idea工具的配置方式,配置了spring web/nacos/seata依赖。启动会报错,这是因为spring-cloud-starter-alibaba-seata这个包seata版本不是1.3.0或是缺少了seata-all这个包的依赖,最终引入依赖为:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<exclusion>
<artifactId>seata-all</artifactId>
<groupId>io.seata</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
<