前言
Seata框架是一个XA(两阶段提交)解决方案
XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。
Seata术语
TC:事务协调者。维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM:事务管理器。定义全局事务的范围:开始全局事务、提交或回滚全局事务
RM:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
提示:以下是本篇文章正文内容,下面案例仅供参考
一、Seata 是什么?
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
模式 | 介绍 | 技术栈 |
---|---|---|
AT | 无侵入的分布式事务解决方案,适用于不希望对业务进行改造的场景,几乎0学习成本(sql都由框架托管统一执行,会存在脏写问题) | seata、shardingsphere |
TCC | 高性能分布式事务解决方案,适用于核心系统等对性能有很高要求的场景(第一阶段会产生行锁,事务执行太久会锁行很久) | seata、service-comb |
Saga | 长事务解决方案,适用于业务流程长且需要保证事务最终一致性的业务系统(第一阶段就操作DB,会存在脏读问题) | seata、shardingsphere、service-comb |
XA | 分布式强一致性的解决方案,但性能低而使用较少。 | seata、shardingsphere |
全局事务定义为若干分支事务的整体协调:
- TM 向 TC 请求发起(Begin)、提交(Commit)、回滚(Rollback)全局事务。
- TM 把代表全局事务的 XID 绑定到分支事务上。
- RM 向 TC 注册,把分支事务关联到 XID 代表的全局事务中。
- RM 把分支事务的执行结果上报给 TC。
- TC 发送分支提交(Branch Commit)或分支回滚(Branch Rollback)命令给 RM。
AT模式流程图如下:
二、Seata-server服务搭建
1.Seata-server下载地址
https://github.com/seata/seata/releases
2.配置文件修改
- registry.conf
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
loadBalance = "RandomLoadBalance"
loadBalanceVirtualNodes = 10
nacos {
application = "seata-server"
serverAddr = "x.x.x.x:8848"
group = "DEFAULT_GROUP"
namespace = "9681663f-887f-4a92-89e6-33e3e6f83e30"
cluster = "default"
username = "nacos"
password = "nacos"
}
...
file {
name = "file.conf"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "file"
...
file {
name = "file.conf"
}
}
- file.conf
## transaction log store, only used in seata-server
store {
## store mode: file、db、redis
mode = "db"
....
## database store property
db {
datasource = "druid"
## mysql/oracle/postgresql/h2/oceanbase etc.
dbType = "mysql"
driverClassName = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://x.x.x.x:3306/seata"
user = "root"
password = "123456"
minConn = 5
maxConn = 100
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 100
maxWait = 5000
}
...
}
3.Seata-server.db
下载目录 :https://github.com/seata/seata/blob/develop/script/server/db/
- mysql.sql
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
`xid` VARCHAR(128) NOT NULL,
`transaction_id` BIGINT,
`status` TINYINT NOT NULL,
`application_id` VARCHAR(32),
`transaction_service_group` VARCHAR(32),
`transaction_name` VARCHAR(128),
`timeout` INT,
`begin_time` BIGINT,
`application_data` VARCHAR(2000),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`xid`),
KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
`branch_id` BIGINT NOT NULL,
`xid` VARCHAR(128) NOT NULL,
`transaction_id` BIGINT,
`resource_group_id` VARCHAR(32),
`resource_id` VARCHAR(256),
`branch_type` VARCHAR(8),
`status` TINYINT,
`client_id` VARCHAR(64),
`application_data` VARCHAR(2000),
`gmt_create` DATETIME(6),
`gmt_modified` DATETIME(6),
PRIMARY KEY (`branch_id`),
KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
`row_key` VARCHAR(128) NOT NULL,
`xid` VARCHAR(128),
`transaction_id` BIGINT,
`branch_id` BIGINT NOT NULL,
`resource_id` VARCHAR(256),
`table_name` VARCHAR(32),
`pk` VARCHAR(36),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`row_key`),
KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
4.启动Seata-server
D:\workspace\seata-server-1.4.0\seata\bin>seata-server.bat
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file D:\workspace\seata-server-1.4.0\seata\bin\\../logs/seata_gc.log due to No such file or directory
16:55:04,791 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
16:55:04,791 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
16:55:04,792 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/D:/workspace/seata-server-1.4.0/seata/conf/logback.xml]
16:55:04,792 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs multiple times on the classpath.
16:55:04,792 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/D:/workspace/seata-server-1.4.0/seata/conf/logback.xml]
16:55:04,792 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [jar:file:/D:/workspace/seata-server-1.4.0/seata/lib/seata-server-1.4.0.jar!/logback.xml]
16:55:04,903 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
16:55:04,907 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Will scan for changes in [file:/D:/workspace/seata-server-1.4.0/seata/conf/logback.xml]
16:55:04,907 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeTask scanning period to 1 minutes
16:55:04,910 |-INFO in ch.qos.logback.classic.joran.action.LoggerContextListenerAction - Adding LoggerContextListener of type [io.seata.server.logging.listener.SystemPropertyLoggerContextListener] to the object stack
16:55:04,910 |-INFO in ch.qos.logback.classic.joran.action.LoggerContextListenerAction - Starting LoggerContextListener
16:55:04,910 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word clr with class [io.seata.server.logging.logback.ColorConverter]
16:55:04,910 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word wex with class [io.seata.server.logging.logback.WhitespaceThrowableProxyConverter]
16:55:04,910 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word wEx with class [io.seata.server.logging.logback.ExtendedWhitespaceThrowableProxyConverter]
16:55:04,912 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
16:55:04,915 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CONSOLE]
16:55:04,920 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
16:55:05,014 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
16:55:05,016 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ALL]
16:55:05,043 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1987083830 - Archive files will be limited to [2048 MB] each.
16:55:05,045 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1987083830 - Will use gz compression
16:55:05,046 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1987083830 - Will use the pattern D:/Users/80320948/logs/seata/history/seata-server.8091.all.%d{yyyy-MM-dd}.%i.log for the active file
16:55:05,048 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@614ddd49 - The date pattern is 'yyyy-MM-dd' from file name pattern 'D:/Users/80320948/logs/seata/history/seata-server.8091.all.%d{yyyy-MM-dd}.%i.log.gz'.
16:55:05,048 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@614ddd49 - Roll-over at midnight.
16:55:05,051 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@614ddd49 - Setting initial period to Tue Apr 06 16:54:52 CST 2021
16:55:05,053 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1987083830 - Cleaning on start up
16:55:05,053 |-INFO in c.q.l.core.rolling.helper.TimeBasedArchiveRemover - first clean up after appender initialization
16:55:05,054 |-INFO in c.q.l.core.rolling.helper.TimeBasedArchiveRemover - Multiple periods, i.e. 32 periods, seem to have elapsed. This is expected at application start.
16:55:05,054 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
16:55:05,056 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ALL] - Active log file name: D:\Users\80320948/logs/seata/seata-server.8091.all.log
16:55:05,056 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ALL] - File property is set to [D:\Users\80320948/logs/seata/seata-server.8091.all.log]
16:55:05,057 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
16:55:05,057 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [WARN]
16:55:05,059 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@525683462 - Archive files will be limited to [2048 MB] each.
16:55:05,059 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@525683462 - Will use gz compression
16:55:05,059 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@525683462 - Will use the pattern D:/Users/80320948/logs/seata/history/seata-server.8091.warn.%d{yyyy-MM-dd}.%i.log for the active file
16:55:05,060 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@694e1548 - The date pattern is 'yyyy-MM-dd' from file name pattern 'D:/Users/80320948/logs/seata/history/seata-server.8091.warn.%d{yyyy-MM-dd}.%i.log.gz'.
16:55:05,060 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@694e1548 - Roll-over at midnight.
16:55:05,060 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@694e1548 - Setting initial period to Tue Apr 06 16:54:22 CST 2021
16:55:05,061 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@525683462 - Cleaning on start up
16:55:05,061 |-INFO in c.q.l.core.rolling.helper.TimeBasedArchiveRemover - first clean up after appender initialization
16:55:05,061 |-INFO in c.q.l.core.rolling.helper.TimeBasedArchiveRemover - Multiple periods, i.e. 32 periods, seem to have elapsed. This is expected at application start.
16:55:05,061 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
16:55:05,062 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[WARN] - Active log file name: D:\Users\80320948/logs/seata/seata-server.8091.warn.log
16:55:05,062 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[WARN] - File property is set to [D:\Users\80320948/logs/seata/seata-server.8091.warn.log]
16:55:05,062 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
16:55:05,062 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ERROR]
16:55:05,063 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@473581465 - Archive files will be limited to [2048 MB] each.
16:55:05,063 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@473581465 - Will use gz compression
16:55:05,063 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@473581465 - Will use the pattern D:/Users/80320948/logs/seata/history/seata-server.8091.error.%d{yyyy-MM-dd}.%i.log for the active file
16:55:05,064 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@131276c2 - The date pattern is 'yyyy-MM-dd' from file name pattern 'D:/Users/80320948/logs/seata/history/seata-server.8091.error.%d{yyyy-MM-dd}.%i.log.gz'.
16:55:05,064 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@131276c2 - Roll-over at midnight.
16:55:05,064 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@131276c2 - Setting initial period to Tue Apr 06 16:54:23 CST 2021
16:55:05,064 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@473581465 - Cleaning on start up
16:55:05,064 |-INFO in c.q.l.core.rolling.helper.TimeBasedArchiveRemover - first clean up after appender initialization
16:55:05,065 |-INFO in c.q.l.core.rolling.helper.TimeBasedArchiveRemover - Multiple periods, i.e. 32 periods, seem to have elapsed. This is expected at application start.
16:55:05,065 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
16:55:05,065 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERROR] - Active log file name: D:\Users\80320948/logs/seata/seata-server.8091.error.log
16:55:05,065 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERROR] - File property is set to [D:\Users\80320948/logs/seata/seata-server.8091.error.log]
16:55:05,065 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
16:55:05,066 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [ALL] to Logger[ROOT]
16:55:05,066 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [WARN] to Logger[ROOT]
16:55:05,066 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [ERROR] to Logger[ROOT]
16:55:05,066 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [CONSOLE] to Logger[ROOT]
16:55:05,066 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
16:55:05,067 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@26aa12dd - Registering current configuration as safe fallback point
SLF4J: A number (18) of logging calls during the initialization phase have been intercepted and are
SLF4J: now being replayed. These are subject to the filtering rules of the underlying logging system.
SLF4J: See also http://www.slf4j.org/codes.html#replay
16:55:05.131 INFO --- [ main] io.seata.config.FileConfiguration : The file name of the operation is registry
16:55:05.135 INFO --- [ main] io.seata.config.FileConfiguration : The configuration file used is D:\workspace\seata-server-1.4.0\seata\conf\registry.conf
16:55:05.207 INFO --- [ main] io.seata.config.FileConfiguration : The file name of the operation is file.conf
16:55:05.208 INFO --- [ main] io.seata.config.FileConfiguration : The configuration file used is file.conf
16:55:09.641 INFO --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
16:55:10.283 INFO --- [ main] i.s.core.rpc.netty.NettyServerBootstrap : Server started, listen port: 8091
三、测试项目搭建
1.订单服务
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>order</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>order</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Seata -->
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<artifactId>seata-all</artifactId>
<groupId>io.seata</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- bootstrap.yml
server:
port: 8080
spring:
application:
name: order
cloud:
nacos:
server-addr: x.x.x.x:8848
discovery:
namespace: 9681663f-887f-4a92-89e6-33e3e6f83e30
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://x.x.x.x:3306/order?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: 123456
feign:
client:
config:
default:
read-timeout: 600000
connect-timeout: 600000
seata:
registry:
nacos:
server-addr: x.x.x.x:8848
namespace: 9681663f-887f-4a92-89e6-33e3e6f83e30
enabled: true
logging:
level:
io:
seata: info
- file.conf
service{
disableGlobalTransaction=false
}
- FeignInterceptor
将全局事务ID放入请求头中,传递至其他服务
@Component
public class FeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header(RootContext.KEY_XID, RootContext.getXID());
}
}
- OrderServiceImpl
@Service
public class OrderServiceImpl implements OrderService {
private OrderMapper orderMapper;
private StockClient stockClient;
public OrderServiceImpl(OrderMapper orderMapper, StockClient stockClient) {
this.orderMapper = orderMapper;
this.stockClient = stockClient;
}
@Override
@GlobalTransactional(rollbackFor = Exception.class)
public void commit(Long userId, Long goodsId, Integer count) {
OrderEntity orderEntity = new OrderEntity();
orderEntity.setUserId(userId);
orderEntity.setGoodsId(goodsId);
orderMapper.save(orderEntity);
StockDeductRequestDTO request = new StockDeductRequestDTO();
request.setGoodsId(goodsId);
request.setCount(count);
stockClient.deduct(request);
}
}
- 启动
D:\Java\jdk1.8.0_141\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63800,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.profiles.active=dev -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:D:\Users\80320948\.IntelliJIdea2019.3\system\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "D:\Java\jdk1.8.0_141\jre\lib\charsets.jar;D:\Java\jdk1.8.0_141\jre\lib\deploy.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\access-bridge-64.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\cldrdata.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\dnsns.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\jaccess.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\jfxrt.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\localedata.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\nashorn.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\sunec.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\sunjce_provider.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\sunmscapi.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\sunpkcs11.jar;D:\Java\jdk1.8.0_141\jre\lib\ext\zipfs.jar;D:\Java\jdk1.8.0_141\jre\lib\javaws.jar;D:\Java\jdk1.8.0_141\jre\lib\jce.jar;D:\Java\jdk1.8.0_141\jre\lib\jfr.jar;D:\Java\jdk1.8.0_141\jre\lib\jfxswt.jar;D:\Java\jdk1.8.0_141\jre\lib\jsse.jar;D:\Java\jdk1.8.0_141\jre\lib\management-agent.jar;D:\Java\jdk1.8.0_141\jre\lib\plugin.jar;D:\Java\jdk1.8.0_141\jre\lib\resources.jar;D:\Java\jdk1.8.0_141\jre\lib\rt.jar;D:\workspace\seata\order\target\classes;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.2.6.RELEASE\spring-boot-starter-data-jpa-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.2.6.RELEASE\spring-boot-starter-aop-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\aspectj\aspectjweaver\1.9.5\aspectjweaver-1.9.5.jar;D:\Users\80320948\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;D:\Users\80320948\.m2\repository\jakarta\persistence\jakarta.persistence-api\2.2.3\jakarta.persistence-api-2.2.3.jar;D:\Users\80320948\.m2\repository\jakarta\transaction\jakarta.transaction-api\1.3.3\jakarta.transaction-api-1.3.3.jar;D:\Users\80320948\.m2\repository\org\hibernate\hibernate-core\5.4.12.Final\hibernate-core-5.4.12.Final.jar;D:\Users\80320948\.m2\repository\org\jboss\logging\jboss-logging\3.4.1.Final\jboss-logging-3.4.1.Final.jar;D:\Users\80320948\.m2\repository\org\javassist\javassist\3.24.0-GA\javassist-3.24.0-GA.jar;D:\Users\80320948\.m2\repository\net\bytebuddy\byte-buddy\1.10.8\byte-buddy-1.10.8.jar;D:\Users\80320948\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;D:\Users\80320948\.m2\repository\org\jboss\jandex\2.1.1.Final\jandex-2.1.1.Final.jar;D:\Users\80320948\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;D:\Users\80320948\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;D:\Users\80320948\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.0.Final\hibernate-commons-annotations-5.1.0.Final.jar;D:\Users\80320948\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.2\jaxb-runtime-2.3.2.jar;D:\Users\80320948\.m2\repository\org\glassfish\jaxb\txw2\2.3.2\txw2-2.3.2.jar;D:\Users\80320948\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.8\istack-commons-runtime-3.0.8.jar;D:\Users\80320948\.m2\repository\org\jvnet\staxex\stax-ex\1.8.1\stax-ex-1.8.1.jar;D:\Users\80320948\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.16\FastInfoset-1.2.16.jar;D:\Users\80320948\.m2\repository\org\springframework\data\spring-data-jpa\2.2.6.RELEASE\spring-data-jpa-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\data\spring-data-commons\2.2.6.RELEASE\spring-data-commons-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-orm\5.2.5.RELEASE\spring-orm-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-tx\5.2.5.RELEASE\spring-tx-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-aspects\5.2.5.RELEASE\spring-aspects-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.2.6.RELEASE\spring-boot-starter-web-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot-starter\2.2.6.RELEASE\spring-boot-starter-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.2.6.RELEASE\spring-boot-starter-logging-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\Users\80320948\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\Users\80320948\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.12.1\log4j-to-slf4j-2.12.1.jar;D:\Users\80320948\.m2\repository\org\apache\logging\log4j\log4j-api\2.12.1\log4j-api-2.12.1.jar;D:\Users\80320948\.m2\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;D:\Users\80320948\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\Users\80320948\.m2\repository\org\yaml\snakeyaml\1.25\snakeyaml-1.25.jar;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.2.6.RELEASE\spring-boot-starter-json-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.10.3\jackson-databind-2.10.3.jar;D:\Users\80320948\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.10.3\jackson-annotations-2.10.3.jar;D:\Users\80320948\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.10.3\jackson-datatype-jdk8-2.10.3.jar;D:\Users\80320948\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.10.3\jackson-datatype-jsr310-2.10.3.jar;D:\Users\80320948\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.10.3\jackson-module-parameter-names-2.10.3.jar;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.2.6.RELEASE\spring-boot-starter-tomcat-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.33\tomcat-embed-core-9.0.33.jar;D:\Users\80320948\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.33\tomcat-embed-el-9.0.33.jar;D:\Users\80320948\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.33\tomcat-embed-websocket-9.0.33.jar;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot-starter-validation\2.2.6.RELEASE\spring-boot-starter-validation-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;D:\Users\80320948\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.18.Final\hibernate-validator-6.0.18.Final.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-web\5.2.5.RELEASE\spring-web-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-webmvc\5.2.5.RELEASE\spring-webmvc-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-expression\5.2.5.RELEASE\spring-expression-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot-devtools\2.2.6.RELEASE\spring-boot-devtools-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot\2.2.6.RELEASE\spring-boot-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.2.6.RELEASE\spring-boot-autoconfigure-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-core\5.2.5.RELEASE\spring-core-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-jcl\5.2.5.RELEASE\spring-jcl-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.2.6.RELEASE\spring-boot-starter-jdbc-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\com\zaxxer\HikariCP\3.4.2\HikariCP-3.4.2.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-jdbc\5.2.5.RELEASE\spring-jdbc-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\mysql\mysql-connector-java\8.0.19\mysql-connector-java-8.0.19.jar;D:\Users\80320948\.m2\repository\io\seata\seata-spring-boot-starter\1.0.0\seata-spring-boot-starter-1.0.0.jar;D:\Users\80320948\.m2\repository\io\seata\seata-all\1.0.0\seata-all-1.0.0.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-context\5.2.5.RELEASE\spring-context-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-beans\5.2.5.RELEASE\spring-beans-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\spring-aop\5.2.5.RELEASE\spring-aop-5.2.5.RELEASE.jar;D:\Users\80320948\.m2\repository\io\netty\netty-all\4.1.48.Final\netty-all-4.1.48.Final.jar;D:\Users\80320948\.m2\repository\com\alibaba\fastjson\1.2.60\fastjson-1.2.60.jar;D:\Users\80320948\.m2\repository\com\alibaba\druid\1.1.12\druid-1.1.12.jar;D:\Users\80320948\.m2\repository\com\typesafe\config\1.2.1\config-1.2.1.jar;D:\Users\80320948\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;D:\Users\80320948\.m2\repository\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;D:\Users\80320948\.m2\repository\org\apache\commons\commons-pool2\2.7.0\commons-pool2-2.7.0.jar;D:\Users\80320948\.m2\repository\commons-pool\commons-pool\1.6\commons-pool-1.6.jar;D:\Users\80320948\.m2\repository\com\google\protobuf\protobuf-java\3.7.1\protobuf-java-3.7.1.jar;D:\Users\80320948\.m2\repository\cglib\cglib\3.1\cglib-3.1.jar;D:\Users\80320948\.m2\repository\org\ow2\asm\asm\4.2\asm-4.2.jar;D:\Users\80320948\.m2\repository\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;D:\Users\80320948\.m2\repository\com\github\ben-manes\caffeine\caffeine\2.8.1\caffeine-2.8.1.jar;D:\Users\80320948\.m2\repository\org\checkerframework\checker-qual\3.1.0\checker-qual-3.1.0.jar;D:\Users\80320948\.m2\repository\com\google\errorprone\error_prone_annotations\2.3.4\error_prone_annotations-2.3.4.jar;D:\Users\80320948\.m2\repository\org\springframework\cloud\spring-cloud-starter\2.2.6.RELEASE\spring-cloud-starter-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\cloud\spring-cloud-context\2.2.6.RELEASE\spring-cloud-context-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\security\spring-security-crypto\5.2.2.RELEASE\spring-security-crypto-5.2.2.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\cloud\spring-cloud-commons\2.2.6.RELEASE\spring-cloud-commons-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\security\spring-security-rsa\1.0.9.RELEASE\spring-security-rsa-1.0.9.RELEASE.jar;D:\Users\80320948\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.64\bcpkix-jdk15on-1.64.jar;D:\Users\80320948\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.64\bcprov-jdk15on-1.64.jar;D:\Users\80320948\.m2\repository\org\springframework\cloud\spring-cloud-starter-openfeign\2.2.6.RELEASE\spring-cloud-starter-openfeign-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\cloud\spring-cloud-openfeign-core\2.2.6.RELEASE\spring-cloud-openfeign-core-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\cloud\spring-cloud-netflix-ribbon\2.2.6.RELEASE\spring-cloud-netflix-ribbon-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\cloud\spring-cloud-netflix-archaius\2.2.6.RELEASE\spring-cloud-netflix-archaius-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\io\github\openfeign\form\feign-form-spring\3.8.0\feign-form-spring-3.8.0.jar;D:\Users\80320948\.m2\repository\io\github\openfeign\form\feign-form\3.8.0\feign-form-3.8.0.jar;D:\Users\80320948\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;D:\Users\80320948\.m2\repository\io\github\openfeign\feign-core\10.10.1\feign-core-10.10.1.jar;D:\Users\80320948\.m2\repository\io\github\openfeign\feign-slf4j\10.10.1\feign-slf4j-10.10.1.jar;D:\Users\80320948\.m2\repository\io\github\openfeign\feign-hystrix\10.10.1\feign-hystrix-10.10.1.jar;D:\Users\80320948\.m2\repository\com\netflix\archaius\archaius-core\0.7.6\archaius-core-0.7.6.jar;D:\Users\80320948\.m2\repository\com\google\code\findbugs\jsr305\3.0.1\jsr305-3.0.1.jar;D:\Users\80320948\.m2\repository\commons-configuration\commons-configuration\1.8\commons-configuration-1.8.jar;D:\Users\80320948\.m2\repository\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;D:\Users\80320948\.m2\repository\com\netflix\hystrix\hystrix-core\1.5.18\hystrix-core-1.5.18.jar;D:\Users\80320948\.m2\repository\org\hdrhistogram\HdrHistogram\2.1.9\HdrHistogram-2.1.9.jar;D:\Users\80320948\.m2\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-discovery\2.2.1.RELEASE\spring-cloud-starter-alibaba-nacos-discovery-2.2.1.RELEASE.jar;D:\Users\80320948\.m2\repository\com\alibaba\nacos\nacos-client\1.2.1\nacos-client-1.2.1.jar;D:\Users\80320948\.m2\repository\com\alibaba\nacos\nacos-common\1.2.1\nacos-common-1.2.1.jar;D:\Users\80320948\.m2\repository\commons-io\commons-io\2.2\commons-io-2.2.jar;D:\Users\80320948\.m2\repository\com\alibaba\nacos\nacos-api\1.2.1\nacos-api-1.2.1.jar;D:\Users\80320948\.m2\repository\com\google\guava\guava\22.0\guava-22.0.jar;D:\Users\80320948\.m2\repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;D:\Users\80320948\.m2\repository\org\codehaus\mojo\animal-sniffer-annotations\1.14\animal-sniffer-annotations-1.14.jar;D:\Users\80320948\.m2\repository\commons-codec\commons-codec\1.13\commons-codec-1.13.jar;D:\Users\80320948\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.10.3\jackson-core-2.10.3.jar;D:\Users\80320948\.m2\repository\io\prometheus\simpleclient\0.5.0\simpleclient-0.5.0.jar;D:\Users\80320948\.m2\repository\com\alibaba\spring\spring-context-support\1.0.6\spring-context-support-1.0.6.jar;D:\Users\80320948\.m2\repository\org\springframework\cloud\spring-cloud-starter-netflix-ribbon\2.2.2.RELEASE\spring-cloud-starter-netflix-ribbon-2.2.2.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\cloud\spring-cloud-starter-netflix-archaius\2.2.2.RELEASE\spring-cloud-starter-netflix-archaius-2.2.2.RELEASE.jar;D:\Users\80320948\.m2\repository\com\netflix\ribbon\ribbon\2.3.0\ribbon-2.3.0.jar;D:\Users\80320948\.m2\repository\com\netflix\ribbon\ribbon-transport\2.3.0\ribbon-transport-2.3.0.jar;D:\Users\80320948\.m2\repository\io\reactivex\rxnetty-contexts\0.4.9\rxnetty-contexts-0.4.9.jar;D:\Users\80320948\.m2\repository\io\reactivex\rxnetty-servo\0.4.9\rxnetty-servo-0.4.9.jar;D:\Users\80320948\.m2\repository\javax\inject\javax.inject\1\javax.inject-1.jar;D:\Users\80320948\.m2\repository\io\reactivex\rxnetty\0.4.9\rxnetty-0.4.9.jar;D:\Users\80320948\.m2\repository\com\netflix\ribbon\ribbon-core\2.3.0\ribbon-core-2.3.0.jar;D:\Users\80320948\.m2\repository\com\netflix\ribbon\ribbon-httpclient\2.3.0\ribbon-httpclient-2.3.0.jar;D:\Users\80320948\.m2\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;D:\Users\80320948\.m2\repository\org\apache\httpcomponents\httpclient\4.5.12\httpclient-4.5.12.jar;D:\Users\80320948\.m2\repository\org\apache\httpcomponents\httpcore\4.4.13\httpcore-4.4.13.jar;D:\Users\80320948\.m2\repository\com\sun\jersey\jersey-client\1.19.1\jersey-client-1.19.1.jar;D:\Users\80320948\.m2\repository\com\sun\jersey\jersey-core\1.19.1\jersey-core-1.19.1.jar;D:\Users\80320948\.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;D:\Users\80320948\.m2\repository\com\sun\jersey\contribs\jersey-apache-client4\1.19.1\jersey-apache-client4-1.19.1.jar;D:\Users\80320948\.m2\repository\com\netflix\servo\servo-core\0.10.1\servo-core-0.10.1.jar;D:\Users\80320948\.m2\repository\com\netflix\servo\servo-internal\0.10.1\servo-internal-0.10.1.jar;D:\Users\80320948\.m2\repository\com\netflix\netflix-commons\netflix-commons-util\0.1.1\netflix-commons-util-0.1.1.jar;D:\Users\80320948\.m2\repository\com\netflix\ribbon\ribbon-loadbalancer\2.3.0\ribbon-loadbalancer-2.3.0.jar;D:\Users\80320948\.m2\repository\com\netflix\netflix-commons\netflix-statistics\0.1.1\netflix-statistics-0.1.1.jar;D:\Users\80320948\.m2\repository\io\reactivex\rxjava\1.3.8\rxjava-1.3.8.jar;D:\Users\80320948\.m2\repository\org\apache\commons\commons-lang3\3.11\commons-lang3-3.11.jar;D:\Users\80320948\.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.2.6.RELEASE\spring-cloud-starter-sleuth-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.2.6.RELEASE\spring-cloud-sleuth-core-2.2.6.RELEASE.jar;D:\Users\80320948\.m2\repository\org\aspectj\aspectjrt\1.9.5\aspectjrt-1.9.5.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave\5.12.7\brave-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\reporter2\zipkin-reporter-brave\2.15.2\zipkin-reporter-brave-2.15.2.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-context-slf4j\5.12.7\brave-context-slf4j-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-messaging\5.12.7\brave-instrumentation-messaging-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-rpc\5.12.7\brave-instrumentation-rpc-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\5.12.7\brave-instrumentation-spring-web-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-http\5.12.7\brave-instrumentation-http-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-rabbit\5.12.7\brave-instrumentation-spring-rabbit-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-clients\5.12.7\brave-instrumentation-kafka-clients-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-kafka-streams\5.12.7\brave-instrumentation-kafka-streams-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-httpclient\5.12.7\brave-instrumentation-httpclient-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-httpasyncclient\5.12.7\brave-instrumentation-httpasyncclient-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\5.12.7\brave-instrumentation-spring-webmvc-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\5.12.7\brave-instrumentation-servlet-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\brave\brave-instrumentation-jms\5.12.7\brave-instrumentation-jms-5.12.7.jar;D:\Users\80320948\.m2\repository\io\zipkin\reporter2\zipkin-reporter-metrics-micrometer\2.15.2\zipkin-reporter-metrics-micrometer-2.15.2.jar;D:\Users\80320948\.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.15.2\zipkin-reporter-2.15.2.jar;D:\Users\80320948\.m2\repository\io\zipkin\zipkin2\zipkin\2.21.7\zipkin-2.21.7.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar" com.example.order.OrderApplication
Connected to the target VM, address: '127.0.0.1:63800', transport: 'socket'
2021-04-06 17:27:40.521 INFO [order,,,] 227336 --- [ restartedMain] o.s.b.devtools.restart.ChangeableUrls : The Class-Path manifest attribute in D:\Users\80320948\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.2\jaxb-runtime-2.3.2.jar referenced one or more files that do not exist: file:/D:/Users/80320948/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jakarta.xml.bind-api-2.3.2.jar,file:/D:/Users/80320948/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/txw2-2.3.2.jar,file:/D:/Users/80320948/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/istack-commons-runtime-3.0.8.jar,file:/D:/Users/80320948/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/stax-ex-1.8.1.jar,file:/D:/Users/80320948/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/FastInfoset-1.2.16.jar,file:/D:/Users/80320948/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jakarta.activation-api-1.2.1.jar
2021-04-06 17:27:40.523 INFO [order,,,] 227336 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.6.RELEASE)
2021-04-06 17:27:40.839 INFO [order,,,] 227336 --- [ restartedMain] com.example.order.OrderApplication : The following profiles are active: dev
2021-04-06 17:27:41.546 INFO [order,,,] 227336 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2021-04-06 17:27:41.611 INFO [order,,,] 227336 --- [ restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 57ms. Found 1 JPA repository interfaces.
2021-04-06 17:27:41.928 INFO [order,,,] 227336 --- [ restartedMain] o.s.cloud.context.scope.GenericScope : BeanFactory id=b8d5fd61-d6fe-3711-84da-ade9e6f8dd02
2021-04-06 17:27:41.997 INFO [order,,,] 227336 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'com.example.order.feign.StockClient' of type [org.springframework.cloud.openfeign.FeignClientFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-06 17:27:42.020 INFO [order,,,] 227336 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'spring.cloud.alibaba.seata-io.seata.spring.boot.autoconfigure.properties.SpringCloudAlibabaConfiguration' of type [io.seata.spring.boot.autoconfigure.properties.SpringCloudAlibabaConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-06 17:27:42.021 INFO [order,,,] 227336 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'seataProperties' of type [io.seata.spring.boot.autoconfigure.properties.SeataProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-06 17:27:42.021 INFO [order,,,] 227336 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'io.seata.spring.boot.autoconfigure.SeataAutoConfiguration' of type [io.seata.spring.boot.autoconfigure.SeataAutoConfiguration$$EnhancerBySpringCGLIB$$8a297559] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-06 17:27:42.029 INFO [order,,,] 227336 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'springUtils' of type [io.seata.spring.boot.autoconfigure.util.SpringUtils] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-06 17:27:42.029 INFO [order,,,] 227336 --- [ restartedMain] i.s.s.b.a.SeataAutoConfiguration : Automatically configure Seata
2021-04-06 17:27:42.056 INFO [order,,,] 227336 --- [ restartedMain] io.seata.config.FileConfiguration : The file name of the operation is registry.conf
2021-04-06 17:27:42.080 INFO [order,,,] 227336 --- [ restartedMain] i.s.common.loader.EnhancedServiceLoader : load ExtConfigurationProvider[null] extension by class[io.seata.spring.boot.autoconfigure.provider.SpringBootConfigurationProvider]
2021-04-06 17:27:42.087 INFO [order,,,] 227336 --- [ restartedMain] io.seata.config.ConfigurationFactory : load extConfiguration:FileConfiguration$$EnhancerByCGLIB$$862af1eb
2021-04-06 17:27:42.090 INFO [order,,,] 227336 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configProperties' of type [io.seata.spring.boot.autoconfigure.properties.registry.ConfigProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-06 17:27:42.092 INFO [order,,,] 227336 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'configFileProperties' of type [io.seata.spring.boot.autoconfigure.properties.registry.ConfigFileProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-06 17:27:42.093 INFO [order,,,] 227336 --- [ restartedMain] io.seata.config.FileConfiguration : The file name of the operation is file.conf
2021-04-06 17:27:42.101 INFO [order,,,] 227336 --- [ restartedMain] io.seata.config.ConfigurationFactory : load extConfiguration:FileConfiguration$$EnhancerByCGLIB$$862af1eb
2021-04-06 17:27:42.103 INFO [order,,,] 227336 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'serviceProperties' of type [io.seata.spring.boot.autoconfigure.properties.file.ServiceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-06 17:27:42.104 INFO [order,,,] 227336 --- [ restartedMain] i.s.s.a.GlobalTransactionScanner : Initializing Global Transaction Clients ...
2021-04-06 17:27:42.114 WARN [order,,,] 227336 --- [nfigOperate_2_2] io.seata.config.FileConfiguration : Could not found property transport.thread-factory.boss-thread-prefix, try to use default value instead.
2021-04-06 17:27:42.115 WARN [order,,,] 227336 --- [nfigOperate_2_2] io.seata.config.FileConfiguration : Could not found property transport.thread-factory.worker-thread-prefix, try to use default value instead.
2021-04-06 17:27:42.115 WARN [order,,,] 227336 --- [nfigOperate_2_2] io.seata.config.FileConfiguration : Could not found property transport.thread-factory.share-boss-worker, try to use default value instead.
2021-04-06 17:27:42.117 INFO [order,,,] 227336 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'transportProperties' of type [io.seata.spring.boot.autoconfigure.properties.file.TransportProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-06 17:27:42.118 WARN [order,,,] 227336 --- [nfigOperate_2_2] io.seata.config.FileConfiguration : Could not found property transport.thread-factory.worker-thread-size, try to use default value instead.
2021-04-06 17:27:42.175 INFO [order,,,] 227336 --- [ restartedMain] i.s.c.r.netty.AbstractRpcRemotingClient : RpcClientBootstrap has started
2021-04-06 17:27:42.176 INFO [order,,,] 227336 --- [ restartedMain] i.s.s.a.GlobalTransactionScanner : Transaction Manager Client is initialized. applicationId[order] txServiceGroup[order-seata-service-group]
2021-04-06 17:27:42.186 INFO [order,,,] 227336 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean 'clientProperties' of type [io.seata.spring.boot.autoconfigure.properties.file.ClientProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2021-04-06 17:27:42.186 INFO [order,,,] 227336 --- [ restartedMain] io.seata.rm.datasource.AsyncWorker : Async Commit Buffer Limit: 10000
2021-04-06 17:27:42.190 INFO [order,,,] 227336 --- [ restartedMain] i.s.c.r.netty.AbstractRpcRemotingClient : RpcClientBootstrap has started
2021-04-06 17:27:42.191 INFO [order,,,] 227336 --- [ restartedMain] i.s.s.a.GlobalTransactionScanner : Resource Manager is initialized. applicationId[order] txServiceGroup[order-seata-service-group]
2021-04-06 17:27:42.191 INFO [order,,,] 227336 --- [ restartedMain] i.s.s.a.GlobalTransactionScanner : Global Transaction Clients are initialized.
2021-04-06 17:27:42.933 INFO [order,,,] 227336 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2021-04-06 17:27:42.943 INFO [order,,,] 227336 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-04-06 17:27:42.943 INFO [order,,,] 227336 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.33]
2021-04-06 17:27:43.102 INFO [order,,,] 227336 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-04-06 17:27:43.103 INFO [order,,,] 227336 --- [ restartedMain] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2251 ms
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2021-04-06 17:27:43.695 INFO [order,,,] 227336 --- [ restartedMain] i.s.s.a.GlobalTransactionScanner : Auto proxy of [dataSource]
2021-04-06 17:27:43.701 INFO [order,,,] 227336 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2021-04-06 17:27:43.704 WARN [order,,,] 227336 --- [ restartedMain] com.zaxxer.hikari.util.DriverDataSource : Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.
2021-04-06 17:27:44.695 INFO [order,,,] 227336 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2021-04-06 17:27:44.720 INFO [order,,,] 227336 --- [ restartedMain] i.s.c.r.netty.NettyClientChannelManager : will connect to 127.0.0.1:8091
2021-04-06 17:27:44.721 INFO [order,,,] 227336 --- [ restartedMain] io.seata.core.rpc.netty.RmRpcClient : RM will register :jdbc:mysql://x.x.x.x:3306/order
2021-04-06 17:27:44.724 INFO [order,,,] 227336 --- [ restartedMain] i.s.core.rpc.netty.NettyPoolableFactory : NettyPool create channel to transactionRole:RMROLE,address:127.0.0.1:8091,msg:< RegisterRMRequest{resourceIds='jdbc:mysql://x.x.x.x:3306/order', applicationId='order', transactionServiceGroup='order-seata-service-group'} >
2021-04-06 17:27:45.111 INFO [order,,,] 227336 --- [lector_RMROLE_1] i.s.common.loader.EnhancedServiceLoader : load Codec[SEATA] extension by class[io.seata.codec.seata.SeataCodec]
2021-04-06 17:27:45.164 INFO [order,,,] 227336 --- [ restartedMain] io.seata.core.rpc.netty.RmRpcClient : register RM success. server version:1.4.0,channel:[id: 0xa6eb6da1, L:/127.0.0.1:63823 - R:/127.0.0.1:8091]
2021-04-06 17:27:45.172 INFO [order,,,] 227336 --- [ restartedMain] i.s.core.rpc.netty.NettyPoolableFactory : register success, cost 93 ms, version:1.4.0,role:RMROLE,channel:[id: 0xa6eb6da1, L:/127.0.0.1:63823 - R:/127.0.0.1:8091]
2021-04-06 17:27:45.418 INFO [order,,,] 227336 --- [ restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2021-04-06 17:27:45.545 INFO [order,,,] 227336 --- [ restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.12.Final
2021-04-06 17:27:45.743 INFO [order,,,] 227336 --- [ restartedMain] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2021-04-06 17:27:46.025 INFO [order,,,] 227336 --- [ restartedMain] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL57Dialect
2021-04-06 17:27:46.785 INFO [order,,,] 227336 --- [ restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2021-04-06 17:27:46.794 INFO [order,,,] 227336 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2021-04-06 17:27:47.486 WARN [order,,,] 227336 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2021-04-06 17:27:47.591 INFO [order,,,] 227336 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2021-04-06 17:27:47.712 INFO [order,,,] 227336 --- [ restartedMain] i.s.s.a.GlobalTransactionScanner : Bean[com.example.order.service.impl.OrderServiceImpl] with name [orderServiceImpl] would use interceptor [io.seata.spring.annotation.GlobalTransactionalInterceptor]
2021-04-06 17:27:47.717 INFO [order,,,] 227336 --- [imeoutChecker_1] i.s.c.r.netty.NettyClientChannelManager : will connect to 127.0.0.1:8091
2021-04-06 17:27:47.718 INFO [order,,,] 227336 --- [imeoutChecker_1] i.s.core.rpc.netty.NettyPoolableFactory : NettyPool create channel to transactionRole:TMROLE,address:127.0.0.1:8091,msg:< RegisterTMRequest{applicationId='order', transactionServiceGroup='order-seata-service-group'} >
2021-04-06 17:27:47.728 INFO [order,,,] 227336 --- [imeoutChecker_1] i.s.core.rpc.netty.NettyPoolableFactory : register success, cost 5 ms, version:1.4.0,role:TMROLE,channel:[id: 0x74f4beea, L:/127.0.0.1:63830 - R:/127.0.0.1:8091]
2021-04-06 17:27:47.770 WARN [order,,,] 227336 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources.
2021-04-06 17:27:47.770 INFO [order,,,] 227336 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2021-04-06 17:27:47.775 WARN [order,,,] 227336 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources.
2021-04-06 17:27:47.775 INFO [order,,,] 227336 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2021-04-06 17:27:48.085 INFO [order,,,] 227336 --- [ restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2021-04-06 17:27:48.365 INFO [order,,,] 227336 --- [ restartedMain] o.s.s.c.ThreadPoolTaskScheduler : Initializing ExecutorService 'Nacso-Watch-Task-Scheduler'
2021-04-06 17:27:49.040 INFO [order,,,] 227336 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2021-04-06 17:27:49.316 INFO [order,,,] 227336 --- [ restartedMain] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP order 10.118.49.162:8080 register finished
2021-04-06 17:27:49.386 INFO [order,,,] 227336 --- [ restartedMain] com.example.order.OrderApplication : Started OrderApplication in 9.495 seconds (JVM running for 10.879)
2021-04-06 17:28:52.893 INFO [order,,,] 227336 --- [tch_RMROLE_1_12] i.s.core.rpc.netty.RmMessageListener : onMessage:UndoLogDeleteRequest{resourceId='jdbc:mysql://x.x.x.x:3306/order', saveDays=7, branchType=AT}
- Seata-server日志
17:27:33.500 INFO --- [ttyServerNIOWorker_1_2_12] i.s.c.r.n.AbstractNettyRemotingServer : 127.0.0.1:63746 to server channel inactive.
17:27:33.500 INFO --- [ttyServerNIOWorker_1_2_12] i.s.c.r.n.AbstractNettyRemotingServer : remove channel:[id: 0x23b12fda, L:/127.0.0.1:8091 ! R:/127.0.0.1:63746]context:RpcContext{applicationId='stock', transactionServiceGroup='stock-seata-service-group', clientId='stock:127.0.0.1:63746', channel=[id: 0x23b12fda, L:/127.0.0.1:8091 ! R:/127.0.0.1:63746], resourceSets=[]}
17:27:45.144 INFO --- [verHandlerThread_1_10_500] i.s.c.r.processor.server.RegRmProcessor : RM register success,message:RegisterRMRequest{resourceIds='jdbc:mysql://x.x.x.x:3306/order', applicationId='order', transactionServiceGroup='order-seata-service-group'},channel:[id: 0x4a44fd38, L:/127.0.0.1:8091 - R:/127.0.0.1:63823],client version:1.0.0
17:27:47.726 INFO --- [ttyServerNIOWorker_1_6_12] i.s.c.r.processor.server.RegTmProcessor : TM register success,message:RegisterTMRequest{applicationId='order', transactionServiceGroup='order-seata-service-group'},channel:[id: 0xa9aab22f, L:/127.0.0.1:8091 - R:/127.0.0.1:63830],client version:1.0.0
17:27:51.134 INFO --- [verHandlerThread_1_11_500] i.s.c.r.processor.server.RegRmProcessor : RM register success,message:RegisterRMRequest{resourceIds='jdbc:mysql://x.x.x.x:3306/stock', applicationId='stock', transactionServiceGroup='stock-seata-service-group'},channel:[id: 0x76beeea2, L:/127.0.0.1:8091 - R:/127.0.0.1:63856],client version:1.0.0
17:27:53.600 INFO --- [ttyServerNIOWorker_1_8_12] i.s.c.r.processor.server.RegTmProcessor : TM register success,message:RegisterTMRequest{applicationId='stock', transactionServiceGroup='stock-seata-service-group'},channel:[id: 0xe2d82085, L:/127.0.0.1:8091 - R:/127.0.0.1:63861],client version:1.0.0
2.库存中心
- 基本配置大致一致
- XidFilter
获取请求头中的全局事务ID绑定至RootContext中
@Component
public class XidFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
String xid = request.getHeader(RootContext.KEY_XID);
if (StringUtils.isNotBlank(xid)) {
RootContext.bind(xid);
}
try {
chain.doFilter(servletRequest, servletResponse);
} finally {
RootContext.unbind();
}
}
}
- StockServiceImpl
@Service
public class StockServiceImpl implements StockService {
private StockMapper stockMapper;
public StockServiceImpl(StockMapper stockMapper) {
this.stockMapper = stockMapper;
}
@Override
@Transactional(rollbackFor = TransactionException.class)
public StockDeductResponseDTO deduct(StockDeductRequestDTO request) {
StockEntity stockEntity = stockMapper.getOne(request.getGoodsId());
stockEntity.setQuantity(stockEntity.getQuantity() - request.getCount());
stockMapper.save(stockEntity);
return new StockDeductResponseDTO(1);
}
}
四、测试
1.正确场景
- order console
2021-04-06 17:33:32.394 INFO [order,,,] 227336 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-04-06 17:33:32.395 INFO [order,,,] 227336 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-04-06 17:33:32.413 INFO [order,,,] 227336 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 18 ms
2021-04-06 17:33:32.457 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] i.s.common.loader.EnhancedServiceLoader : load ContextCore[null] extension by class[io.seata.core.context.ThreadLocalContextCore]
2021-04-06 17:33:32.461 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] i.s.common.loader.EnhancedServiceLoader : load TransactionManager[null] extension by class[io.seata.tm.DefaultTransactionManager]
2021-04-06 17:33:32.461 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] io.seata.tm.TransactionManagerHolder : TransactionManager Singleton io.seata.tm.DefaultTransactionManager@6a5cd2be
2021-04-06 17:33:32.464 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] i.s.common.loader.EnhancedServiceLoader : load LoadBalance[null] extension by class[io.seata.discovery.loadbalance.RandomLoadBalance]
2021-04-06 17:33:32.623 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] i.seata.tm.api.DefaultGlobalTransaction : Begin new global transaction [10.118.49.162:8091:122752230877700096]
2021-04-06 17:33:34.118 WARN [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] i.s.common.loader.EnhancedServiceLoader : load [io.seata.rm.datasource.undo.parser.ProtostuffUndoLogParser] class fail. io/protostuff/runtime/RuntimeEnv
2021-04-06 17:33:34.119 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] i.s.common.loader.EnhancedServiceLoader : load UndoLogParser[jackson] extension by class[io.seata.rm.datasource.undo.parser.JacksonUndoLogParser]
2021-04-06 17:33:35.168 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] c.netflix.config.ChainedDynamicProperty : Flipping property: stock.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2021-04-06 17:33:35.211 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] c.netflix.loadbalancer.BaseLoadBalancer : Client: stock instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=stock,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
2021-04-06 17:33:35.217 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] c.n.l.DynamicServerListLoadBalancer : Using serverListUpdater PollingServerListUpdater
2021-04-06 17:33:35.346 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] c.netflix.config.ChainedDynamicProperty : Flipping property: stock.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2021-04-06 17:33:35.348 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] c.n.l.DynamicServerListLoadBalancer : DynamicServerListLoadBalancer for client stock initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=stock,current list of Servers=[10.118.49.162:8081],Load balancer stats=Zone stats: {unknown=[Zone:unknown; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]
},Server stats: [[Server:10.118.49.162:8081; Zone:UNKNOWN; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
]}ServerList:com.alibaba.cloud.nacos.ribbon.NacosServerList@3ceef234
2021-04-06 17:33:36.222 INFO [order,,,] 227336 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty : Flipping property: stock.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2021-04-06 17:33:38.649 INFO [order,6da5b1204c6b5e63,6da5b1204c6b5e63,true] 227336 --- [nio-8080-exec-1] i.seata.tm.api.DefaultGlobalTransaction : [10.118.49.162:8091:122752230877700096] commit status: Committed
2021-04-06 17:33:39.043 INFO [order,,,] 227336 --- [tch_RMROLE_1_12] i.s.core.rpc.netty.RmMessageListener : onMessage:xid=10.118.49.162:8091:122752230877700096,branchId=122752235113947137,branchType=AT,resourceId=jdbc:mysql://x.x.x.x:3306/order,applicationData=null
2021-04-06 17:33:39.045 INFO [order,,,] 227336 --- [tch_RMROLE_1_12] io.seata.rm.AbstractRMHandler : Branch committing: 10.118.49.162:8091:122752230877700096 122752235113947137 jdbc:mysql://x.x.x.x:3306/order null
2021-04-06 17:33:39.046 INFO [order,,,] 227336 --- [tch_RMROLE_1_12] io.seata.rm.AbstractRMHandler : Branch commit result: PhaseTwo_Committed
- stock console
2021-04-06 17:33:35.475 INFO [stock,,,] 228144 --- [nio-8081-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-04-06 17:33:35.475 INFO [stock,,,] 228144 --- [nio-8081-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-04-06 17:33:35.489 INFO [stock,,,] 228144 --- [nio-8081-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 14 ms
2021-04-06 17:33:35.511 INFO [stock,6da5b1204c6b5e63,8cc5733ae6dd43ef,true] 228144 --- [nio-8081-exec-2] i.s.common.loader.EnhancedServiceLoader : load ContextCore[null] extension by class[io.seata.core.context.ThreadLocalContextCore]
2021-04-06 17:33:36.573 INFO [stock,6da5b1204c6b5e63,8cc5733ae6dd43ef,true] 228144 --- [nio-8081-exec-2] i.s.common.loader.EnhancedServiceLoader : load LoadBalance[null] extension by class[io.seata.discovery.loadbalance.RandomLoadBalance]
2021-04-06 17:33:37.298 WARN [stock,6da5b1204c6b5e63,8cc5733ae6dd43ef,true] 228144 --- [nio-8081-exec-2] i.s.common.loader.EnhancedServiceLoader : load [io.seata.rm.datasource.undo.parser.ProtostuffUndoLogParser] class fail. io/protostuff/runtime/RuntimeEnv
2021-04-06 17:33:37.299 INFO [stock,6da5b1204c6b5e63,8cc5733ae6dd43ef,true] 228144 --- [nio-8081-exec-2] i.s.common.loader.EnhancedServiceLoader : load UndoLogParser[jackson] extension by class[io.seata.rm.datasource.undo.parser.JacksonUndoLogParser]
2021-04-06 17:33:39.358 INFO [stock,,,] 228144 --- [tch_RMROLE_1_12] i.s.core.rpc.netty.RmMessageListener : onMessage:xid=10.118.49.162:8091:122752230877700096,branchId=122752248430862337,branchType=AT,resourceId=jdbc:mysql://x.x.x.x:3306/stock,applicationData=null
2021-04-06 17:33:39.360 INFO [stock,,,] 228144 --- [tch_RMROLE_1_12] io.seata.rm.AbstractRMHandler : Branch committing: 10.118.49.162:8091:122752230877700096 122752248430862337 jdbc:mysql://x.x.x.x:3306/stock null
2021-04-06 17:33:39.360 INFO [stock,,,] 228144 --- [tch_RMROLE_1_12] io.seata.rm.AbstractRMHandler : Branch commit result: PhaseTwo_Committed
2.异常场景
- order console
2021-04-06 17:38:00.824 INFO [order,0a0f2f836b7d105e,0a0f2f836b7d105e,true] 227336 --- [nio-8080-exec-5] i.seata.tm.api.DefaultGlobalTransaction : Begin new global transaction [10.118.49.162:8091:122753355781644288]
2021-04-06 17:38:03.315 INFO [order,,,] 227336 --- [tch_RMROLE_1_12] i.s.core.rpc.netty.RmMessageListener : onMessage:xid=10.118.49.162:8091:122753355781644288,branchId=122753358113677313,branchType=AT,resourceId=jdbc:mysql://x.x.x.x:3306/order,applicationData=null
2021-04-06 17:38:03.316 INFO [order,,,] 227336 --- [tch_RMROLE_1_12] io.seata.rm.AbstractRMHandler : Branch Rollbacking: 10.118.49.162:8091:122753355781644288 122753358113677313 jdbc:mysql://x.x.x.x:3306/order
2021-04-06 17:38:04.512 INFO [order,,,] 227336 --- [tch_RMROLE_1_12] i.s.r.d.undo.AbstractUndoLogManager : xid 10.118.49.162:8091:122753355781644288 branch 122753358113677313, undo_log deleted with GlobalFinished
2021-04-06 17:38:04.588 INFO [order,,,] 227336 --- [tch_RMROLE_1_12] io.seata.rm.AbstractRMHandler : Branch Rollbacked result: PhaseTwo_Rollbacked
2021-04-06 17:38:05.435 INFO [order,0a0f2f836b7d105e,0a0f2f836b7d105e,true] 227336 --- [nio-8080-exec-5] i.seata.tm.api.DefaultGlobalTransaction : [10.118.49.162:8091:122753355781644288] commit status: Finished
- stock console
2021-04-06 17:38:02.911 ERROR [stock,0a0f2f836b7d105e,368ecbdb04659ce9,true] 228144 --- [nio-8081-exec-1] c.e.s.interceptor.MyExceptionHandler : 系统异常. message:Unable to find com.example.stock.entity.StockEntity with id 2
2021-04-06 17:38:02.917 INFO [stock,0a0f2f836b7d105e,368ecbdb04659ce9,true] 228144 --- [nio-8081-exec-1] i.s.common.loader.EnhancedServiceLoader : load TransactionManager[null] extension by class[io.seata.tm.DefaultTransactionManager]
2021-04-06 17:38:02.917 INFO [stock,0a0f2f836b7d105e,368ecbdb04659ce9,true] 228144 --- [nio-8081-exec-1] io.seata.tm.TransactionManagerHolder : TransactionManager Singleton io.seata.tm.DefaultTransactionManager@63ff78f0
2021-04-06 17:38:05.356 INFO [stock,0a0f2f836b7d105e,368ecbdb04659ce9,true] 228144 --- [nio-8081-exec-1] i.seata.tm.api.DefaultGlobalTransaction : [10.118.49.162:8091:122753355781644288] rollback status: Rollbacked
2021-04-06 17:38:05.359 WARN [stock,0a0f2f836b7d105e,368ecbdb04659ce9,true] 228144 --- [nio-8081-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [javax.persistence.EntityNotFoundException: Unable to find com.example.stock.entity.StockEntity with id 2]
3. Seata-server log
17:33:32.467 INFO --- [ batchLoggerPrint_1_1] i.s.c.r.p.server.BatchLogHandler : SeataMergeMessage timeout=60000,transactionName=commit(java.lang.Long, java.lang.Long, java.lang.Integer)
,clientIp:127.0.0.1,vgroup:order-seata-service-group
17:33:32.616 INFO --- [verHandlerThread_1_12_500] i.s.s.coordinator.DefaultCoordinator : Begin new global transaction applicationId: order,transactionServiceGroup: order-seata-service-group, transactionName: commit(java.lang.Long, java.lang.Long, java.lang.Integer),timeout:60000,xid:10.118.49.162:8091:122752230877700096
17:33:33.404 INFO --- [ batchLoggerPrint_1_1] i.s.c.r.p.server.BatchLogHandler : SeataMergeMessage xid=10.118.49.162:8091:122752230877700096,branchType=AT,resourceId=jdbc:mysql://x.x.x.x:3306/order,lockKey=order_tbl:21
,clientIp:127.0.0.1,vgroup:order-seata-service-group
17:33:34.108 INFO --- [verHandlerThread_1_13_500] i.seata.server.coordinator.AbstractCore : Register branch successfully, xid = 10.118.49.162:8091:122752230877700096, branchId = 122752235113947137, resourceId = jdbc:mysql://x.x.x.x:3306/order ,lockKeys = order_tbl:21
17:33:34.339 INFO --- [ batchLoggerPrint_1_1] i.s.c.r.p.server.BatchLogHandler : SeataMergeMessage xid=10.118.49.162:8091:122752230877700096,branchId=122752235113947137,resourceId=null,status=PhaseOne_Done,applicationData=null
,clientIp:127.0.0.1,vgroup:order-seata-service-group
17:33:34.643 INFO --- [verHandlerThread_1_14_500] i.seata.server.coordinator.AbstractCore : Report branch status successfully, xid = 10.118.49.162:8091:122752230877700096, branchId = 122752235113947137
17:33:36.578 INFO --- [ batchLoggerPrint_1_1] i.s.c.r.p.server.BatchLogHandler : SeataMergeMessage xid=10.118.49.162:8091:122752230877700096,branchType=AT,resourceId=jdbc:mysql://x.x.x.x:3306/stock,lockKey=stock_tbl:1
,clientIp:127.0.0.1,vgroup:stock-seata-service-group
17:33:37.285 INFO --- [verHandlerThread_1_15_500] i.seata.server.coordinator.AbstractCore : Register branch successfully, xid = 10.118.49.162:8091:122752230877700096, branchId = 122752248430862337, resourceId = jdbc:mysql://x.x.x.x:3306/stock ,lockKeys = stock_tbl:1
17:33:37.492 INFO --- [ batchLoggerPrint_1_1] i.s.c.r.p.server.BatchLogHandler : SeataMergeMessage xid=10.118.49.162:8091:122752230877700096,branchId=122752248430862337,resourceId=null,status=PhaseOne_Done,applicationData=null
,clientIp:127.0.0.1,vgroup:stock-seata-service-group
17:33:37.821 INFO --- [verHandlerThread_1_16_500] i.seata.server.coordinator.AbstractCore : Report branch status successfully, xid = 10.118.49.162:8091:122752230877700096, branchId = 122752248430862337
17:33:38.005 INFO --- [ batchLoggerPrint_1_1] i.s.c.r.p.server.BatchLogHandler : SeataMergeMessage xid=10.118.49.162:8091:122752230877700096,extraData=null
,clientIp:127.0.0.1,vgroup:order-seata-service-group
17:33:39.982 INFO --- [ AsyncCommitting_1_1] io.seata.server.coordinator.DefaultCore : Committing global transaction is successfully done, xid = 10.118.49.162:8091:122752230877700096.
17:38:00.665 INFO --- [ batchLoggerPrint_1_1] i.s.c.r.p.server.BatchLogHandler : SeataMergeMessage timeout=60000,transactionName=commit(java.lang.Long, java.lang.Long, java.lang.Integer)
,clientIp:127.0.0.1,vgroup:order-seata-service-group
17:38:00.823 INFO --- [verHandlerThread_1_20_500] i.s.s.coordinator.DefaultCoordinator : Begin new global transaction applicationId: order,transactionServiceGroup: order-seata-service-group, transactionName: commit(java.lang.Long, java.lang.Long, java.lang.Integer),timeout:60000,xid:10.118.49.162:8091:122753355781644288
17:38:01.145 INFO --- [ batchLoggerPrint_1_1] i.s.c.r.p.server.BatchLogHandler : SeataMergeMessage xid=10.118.49.162:8091:122753355781644288,branchType=AT,resourceId=jdbc:mysql://x.x.x.x:3306/order,lockKey=order_tbl:22
,clientIp:127.0.0.1,vgroup:order-seata-service-group
17:38:01.830 INFO --- [verHandlerThread_1_21_500] i.seata.server.coordinator.AbstractCore : Register branch successfully, xid = 10.118.49.162:8091:122753355781644288, branchId = 122753358113677313, resourceId = jdbc:mysql://x.x.x.x:3306/order ,lockKeys = order_tbl:22
17:38:02.000 INFO --- [ batchLoggerPrint_1_1] i.s.c.r.p.server.BatchLogHandler : SeataMergeMessage xid=10.118.49.162:8091:122753355781644288,branchId=122753358113677313,resourceId=null,status=PhaseOne_Done,applicationData=null
,clientIp:127.0.0.1,vgroup:order-seata-service-group
17:38:02.296 INFO --- [verHandlerThread_1_22_500] i.seata.server.coordinator.AbstractCore : Report branch status successfully, xid = 10.118.49.162:8091:122753355781644288, branchId = 122753358113677313
17:38:02.920 INFO --- [ batchLoggerPrint_1_1] i.s.c.r.p.server.BatchLogHandler : SeataMergeMessage xid=10.118.49.162:8091:122753355781644288,extraData=null
,clientIp:127.0.0.1,vgroup:stock-seata-service-group
17:38:04.891 INFO --- [verHandlerThread_1_23_500] io.seata.server.coordinator.DefaultCore : Rollback branch transaction successfully, xid = 10.118.49.162:8091:122753355781644288 branchId = 122753358113677313
17:38:05.353 INFO --- [verHandlerThread_1_23_500] io.seata.server.coordinator.DefaultCore : Rollback global transaction successfully, xid = 10.118.49.162:8091:122753355781644288.
17:38:05.362 INFO --- [ batchLoggerPrint_1_1] i.s.c.r.p.server.BatchLogHandler : SeataMergeMessage xid=10.118.49.162:8091:122753355781644288,extraData=null
,clientIp:127.0.0.1,vgroup:order-seata-service-group