注意:
1.seata版本1.4.1
2.使用db配置,mysql
3.nacos版本2.2.3.RELEASE
4.spring-boot-starter-parent版本2.3.1.RELEASE
版本匹配很关键,否则报奇奇怪怪的错!!!!
seata库必要的表
-- -------------------------------- 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(96),`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;
业务系统库必要表(每个业务库里都要添加)
-- 注意此处0.7.0+ 增加字段 context
CREATE TABLE `undo_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`branch_id` bigint(20) NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int(11) NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
seata
com.alibaba.cloud spring-cloud-alibaba-seata 2.2.0.RELEASE io.seata seata-spring-boot-starter
io.seata seata-spring-boot-starter 1.4.1
nacos
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config 2.2.3.RELEASE com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery 2.2.3.RELEASE org.springframework.cloud spring-cloud-netflix-ribbon
下载必要的启动文件
https://github.com/seata/seata/releases
下载必要的nacos里seata配置文件
https://github.com/seata/seata/tree/1.4.1
配置好nacos命名空间后,自动加载seata配置
1.找到/script/config-center/nacos/nacos-config.sh
2.修改里面的mysql配置
3.在git bash里执行脚本(修改命名空间id,nacos账号,nacos密码)
sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca -u username -w password
导入seata配置后效果图
服务yml配置(服务提供方和调用方配置一样)
seata:# 这里要特别注意和nacos中配置的要保持一致,建议配置成 ${spring.application.name}-tx-grouptx-service-group: my_test_tx_groupregistry:type: nacosnacos:# 配置所在命名空间ID,如未配置默认public空间server-addr: 127.0.0.1:8848namespace: d173bb29-9a7c-4a01-aedd-056c63440ba8group: SEATA_GROUPapplication: seata-serveruserName: nacospassword: nacosconfig:type: nacosnacos:server-addr: 127.0.0.1:8848namespace: d173bb29-9a7c-4a01-aedd-056c63440ba8group: SEATA_GROUPuserName: nacospassword: nacosservice:vgroup-mapping:my_test_tx_group: defaultdisable-global-transaction: falseclient:rm:report-success-enable: false
测试时记得在sevice层加@GlobalTransactional,仅调用方添加就行。
如果调用方没添加,被调用放添加,那么仅被调用方回滚。
下一篇:Tomcat日志分割