目录
安装步骤:
到官网自行下载:
官网
数据库的准备
部署教程
就简单的说 你需要 在数据库 建个seata 库 里面存放的是到时候需要回滚的一些数据
sql脚本
还需要在你需要回滚的数据库创建一个 undo 表 进行回滚操作:
undo sql
配置文件的修改
你需要修改的配置文件:
分别修改 注册和存储的:
很简单的 列如 file.conf 的修改:
第一行表示要用什么来存储
然后选择db 代表数据库 再把db 对应的那些修改成自己的数据即可:
register.conf 一样:
注意里面有两处type 都需要修改:
以上便是使用前的准备
开始使用
1:启动nacos 与seata 服务
由于使用到了 nacos 进行注册 所以需要使用nacos进行搭配
启动很简单 打开bin目录的bat文件即可:
注意先启动好nacos
2:微服务的建立
此次用到的测试 有三个微服务三个数据库:
订单 用户 库存
就很简单 下订单 生成订单 扣用户金额 减少库存
步骤
1: 改pom:
<dependencies>
<!--nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--seata-->
<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>
<version>1.4.1</version> <!--最好改成自己在官网下载的那个版本-->
</dependency>
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2:改yaml: 基本上没什么好改的
server:
port: 2002
spring:
application:
name: seata-storage-service
cloud:
alibaba:
# seata:
# tx-service-group: fsp_tx_group 分组的设置
nacos:
discovery:
server-addr: localhost:8848
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/seata_storage
username: root
password: 1234
logging:
level:
io:
seata: info
mybatis:
mapperLocations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
3:需要在resources 下把配置文件复制进来
3:测试
在你需要回滚的事务的 controller或者serviceimple 的方法上 写上这个注解就完事了:
@GlobalTransactional
一些参数的解释:
name :就是name
剩下的解释就知道
补充:(持续更新)
整体的流程:
关于 tm tc rm 的解释 :大概就是这样
回滚原理
这是 第一阶段的操作 最主要的就是 这个before 和 after 快照
这是发生了回滚进行的操作
具体可以用列子进行解释:
如图 我在进行数据的修改之前 先走第一阶段的流程
保存一个before 快照 存储了age=22
然后 进行修改 age =28
随后 又建立了after 快照 存储了 age=28
到此 第一阶段结束
如果发生事务回滚
他首先去查 数据库 age为多少
如果age=28 那和 after快照存储的age对比 一样
那就进行设置 把before快照存储的age 值 设置进去
如果 age!=28 而after 是28 那证明出现了脏读
则会转到人工处理