静下心来看,或许有你想要的。
本人自己搭建测试通过后,整理的文档~留给自己,也留给需要的人。
一、本方案框架版本情况,如下:
1、SpringBoot 2.3.2.RELEASE
2、SpringCloud Hoxton.SR9
3、alibaba cloud 2.2.6.RELEASE
4、nacos 1.4.3
4、seata 1.4.2
5、JDK 1.8
二、seata环境搭建(windows版)
1、官网下载Seata1.4.2windows版本后,进行解压。
2、配置file.conf文件
3、配置 registry.conf文件,此文件有两处地方要改。
第一处:
第二处:
4、创建Seata所需要的数据库表格
-- 不要修改数据库名称,如果修改数据库名要与file.conf中设置数据库名保持一致
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;
5、nacos中配置
(1)首先修改Seata的config.txt
config文件地址获取:https://github.com/seata/seata/blob/1.4.2/script/config-center/config.txt
(2)将上述文件加入到nacos中,自己可以创建一个空间,然后创建dataId为下图名称
6、启动seata,运行seata-server.bat即可。
三、SpringCloud综合应用
1、在需要进行事务控制的子服务所连接的数据库添加表格
CREATE TABLE `undo_log` (
`branch_id` bigint(20) NOT NULL COMMENT 'branch transaction id',
`xid` varchar(128) NOT NULL COMMENT 'global transaction id',
`context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',
`rollback_info` longblob NOT NULL COMMENT 'rollback info',
`log_status` int(11) NOT NULL COMMENT '0:normal status,1:defense status',
`log_created` datetime(6) NOT NULL COMMENT 'create datetime',
`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='AT transaction mode undo table';
2、添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
4、对子服务添加yml配置,此处关于nacos的配置,与上面seata中nacos配置是一致的
seata:
enabled: true
enable-auto-data-source-proxy: true
tx-service-group: dci_tx_group #此处与上面config.txt中的vgroupMapping一致
registry:
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8001 #根据自己情况调整
username: nacos #根据自己情况调整
password: 123456 #根据自己情况调整
cluster: default
group: SEATA_GROUP
namespace: 0835a33e-b787-4906-831a-c593d04cb419 #根据自己情况调整
config:
type: nacos
nacos:
server-addr: 127.0.0.1:8001 #根据自己情况调整
group: SEATA_GROUP
username: nacos #根据自己情况调整
password: 123456 #根据自己情况调整
dataId: seataServer.properties
namespace: 0835a33e-b787-4906-831a-c593d04cb419 #根据自己情况调整
3、添加注解
(1)在启动类上添加
@EnableAutoDataSourceProxy
(2)在实现类添加
@GlobalTransactional
(全文完)