Seata排坑指南
(2021-07-30 12:12:36)
标签:
springcloudnacosseata |
分类: 文档 |
Seata
版本和官方文档、实例代码匹配实在是太乱了,直到加入社区群后,才找到正确打开方式。建议入门必看以下资料:
AT模式整合1.2教程: https://www.bilibili.com/video/BV12Q4y1A7Nt
AT模式升级1.3教程: https://www.bilibili.com/video/BV1Cf4y1X7vR
springcloud整合demo:
https://gitee.com/itCjb/spring-cloud-alibaba-seata-demo
(上述demo内附1.3整合文字版)
1.参考官网版本说明下载最新版seata-server-1.4.2和所需组件。
2.参考官方脚本在mysql上创建seata数据库
3.修改file.conf,使用db存储方式
## transaction log store, only used in seata-server
store {
}
4.修改registry.conf ,使seata注册到nacos
registry {
}
config {
}
5.需要到github上下载、nacos-config.sh
修改config.txt使用db存储
service.vgroupMapping.my_test_tx_group=default
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://121.37.225.23:33060/seata?useUnicode=true
store.db.user=changein
store.db.password=Changein=2020
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
执行nacos-config.sh,将seata配置上传到nacos。
注意:
1.service.vgroupMapping.my_test_tx_group=default 这个为默认是事务组。后面springcloud配置文件会用到,需要一一对应。default为seata-server注册到nacos上seata-server的集群,可以在nacos上服务列表里的seata-server的详情页面看到。
2.以上都没指定nacos的名称空间,默认服务都会在public下。
6.启动seata-server,这时可以在nacos配置列表、服务列表上看到seata的配置和服务。
7.springcloud引入seata,并且我们需要单独引入1.4.2版本
<!--
seata
-->
<dependency>
</dependency>
<dependency>
</dependency>
8.增加seata配置
server:
spring:
seata:
注意,启动应用时,如果报错nacos
login失败,会发现其实读取的spring.cloud.nacos下的username、password
seata.tx-service-group=my_test_tx_group
这里和前面说的config.txt里是事务组必须一一对应。
9.在服务对应的数据库用户下按官方脚本建undo_log表
10.增加数据源代理
package cn.changein.sample.boot.config;
import com.alibaba.druid.pool.DruidDataSource;
import io.seata.rm.datasource.DataSourceProxy;
import io.seata.rm.datasource.xa.DataSourceProxyXA;
import org.mybatis.spring.annotation.MapperScan;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.annotation.Bean;
import
org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
//
DataSourceProxy dsp = new
DataSourceProxyXA(druidDataSource)
}
11.在需要全局事务的地方使用@GlobalTransactional就可以了。
seata1.4.2已经默认开启了数据源代理,AT模式不需要再写一个代理类了。