1.下载源码
下载服务器端 https://github.com/seata/seata/releases 找到1.4.2的zip下载
2.修改配置文件
解压后需要修改config文件 路径\seata\seata-server-1.4.2\conf
针对自己项目所使用的服务注册和配置文件的中间件决定使用哪一个(当前举例nacos),把自己的服务器信息全部填写好
把数据库填好后,注意红框内 如果是mysql 8以上需要加上cj
3.nacos添加配置文件
上面有配置文件信息,所以我们现在需要为服务端提供配置信息
配置文件找源码中的 https://github.com/seata/seata/tree/1.4.2/script/config-center
把该文件拷贝到nacos中,创建一个seata.properties文件
注意下面
4.数据库增加表
服务端
创建一个seate数据库,给服务端使用,并且增加这几张表,源码中有
https://github.com/seata/seata/blob/1.4.2/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 = InnoDBDEFAULT 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 = InnoDBDEFAULT 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 = InnoDBDEFAULT CHARSET = utf8;
客户端
每个使用seata的客户端都需要新增一张回滚表
https://github.com/seata/seata/blob/1.4.2/script/client/at/db/mysql.sql
-- for AT mode you must to init this sql for you business database. the seata server not need it.
CREATE TABLE IF NOT EXISTS `undo_log`
(`branch_id` BIGINT 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 = InnoDBAUTO_INCREMENT = 1DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';
5.项目配置
添加依赖
<dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.4.2</version></dependency>
所有服务需要加上
所有服务配置文件加上
seata:tx-service-group: my_tx_groupregistry:type: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848group : "DEFAULT_GROUP"namespace: ""username: "nacos"password: "nacos"config:type: nacosnacos:server-addr: 127.0.0.1:8848group: "SEATA_GROUP"username: "nacos"password: "nacos"dataId: seata.properties
然后就可以启动服务端 启动客户端开始测试了 方法上使用 @GlobalTransactional
6.启动报错:
启动服务端报错,因为我本地搭建用的mysql 8 以上,之前的驱动名用的com.mysql.jdbc.Driver