参考资料:
参考demo(及学习资料)
参考视频c(AT模式的UNDO_LOG讲的可能有点问题,但是很通俗易懂)
准备环境:
该教程默认已经有如下环境,如果没有可以参考上述教程:
- 部署了Nacos
- 部署了Seata
- 搭建了SpringCloud
- 并且版本已经做到了统一(只要保证JVM里面使用的jar包版本和部署的版本一致即可)
- 同一系列版本见Wiki


模拟事件-搭建demo:
因为seata是分布式事务,所以这个例子需要多个微服务,多个库进行联动
创建数据库
首先创建两个数据库
CREATE DATABASE /*!32312 IF NOT EXISTS*/`seata_db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */;
USE `seata_db1`;
/*Table structure for table `money` */
DROP TABLE IF EXISTS `money`;
CREATE TABLE `money` (
`id` varchar(32) NOT NULL COMMENT '主键',
`user_name` varchar(32) DEFAULT NULL COMMENT '名字',
`bank_money` double DEFAULT NULL COMMENT '银行余额',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `money` */
insert into `money`(`id`,`user_name`,`bank_money`) values
('084d862fa66c4c82886a4b0bb9214ab1','张三',100);

CREATE DATABASE /*!32312 IF NOT EXISTS*/`seata_db2` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */;
USE `seata_db2`;
/*Table structure for table `order_details` */
DROP TABLE IF EXISTS `order_details`;
CREATE TABLE `order_details` (
`id` varchar(32) NOT NULL COMMENT '主键',
`goods_name` varchar(32) DEFAULT NULL COMMENT '商品名',
`count` int(11) DEFAULT NULL COMMENT '仓库余额',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `order_details` */
insert into `order_details`(`id`,`goods_name`,`count`) values
('7072809e86834335843bc918c33074ec','desk',50);

创建示例微服务
用搭建好的SpringClud框架,默认已经整合了nacos,并且已经部署好了seata
关于微服务的创建,这里就不再赘述了,可以参考该文章
参考上述文章,创建两个微服务 seata-demo1和seata-demo2,然后进行相关依赖的导入

这里是将所有的依赖加入到了公共服务里面,请根据个人情况使用,在common-service服务中的pom.xml文件,
Lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>

控制层依赖
<!-- springboot starter web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
mybatis-plus及数据库相关
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--引入mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
fegin组件
<!--fegin组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
nacos相关(使用时默认的,如果nacos不是上述系列的则需要指定版本)
<!--引入nacos client的依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--引入nacos config 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
还有一些bootstrap.yml启动的辅助依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
最后添加的依赖如下:

然后将公共依赖引入创建的两个微服务,参考
<dependency>
<groupId>org.example</groupId>
<artifactId>common-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

将相关配置交给nacos管理,可以参考文章,这里只是贴代码,不赘述
- seata-demo1
bootstrap.yml
spring:
profiles:
include:
uat
bootstrap-uat.yml
spring:
config:
use-legacy-processing: true
profiles.active: uat
application:
name: seata-demo1
cloud:
nacos:
config:
server-addr: localhost:8848
group: DEFAULT_GROUP
username: nacos
password: nacos
file-extension: yaml
refresh-enabled: true

然后将相关配置放入到nacos中
server:
port: 8081
spring:
nacos:
discovery:
server-addr: localhost:8848
username: nacos
password: nacos
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/seata_db1?characterEncoding=UTF-8
username: root
password: 123888

- seata-demo2
bootstrap.yml
spring:
profiles:
include:
uat
bootstrap-uat.yml

1万+

被折叠的 条评论
为什么被折叠?



