SpringCloud Alibaba的分布式事务Seata1.4 :
创建seata的数据
数据库名:seata
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;
修改seata下的conf下的file.conf文件 配置都放在nacos来 配置
store { mode = "db" db { ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc. datasource = "druid" ## mysql/oracle/postgresql/h2/oceanbase etc. dbType = "mysql" driverClassName = "com.mysql.cj.jdbc.Driver" url = "jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai" user = "root" password = "root" minConn = 5 maxConn = 30 globalTable = "global_table" branchTable = "branch_table" lockTable = "lock_table" queryLimit = 100 maxWait = 5000 } }
修改seata下的conf下的registry.conf文件
# 这个是注册中心的配置 registry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa type = "nacos" nacos { application = "seata-server" serverAddr = "127.0.0.1:8848" group = "SEATA_GROUP" namespace = "4da028aa-00a3-4e90-9fb1-59e23073c124" cluster = "default" username = "nacos" password = "nacos" }
}
配置中心的配置
config {
type = “nacos”
nacos {
serverAddr = “127.0.0.1:8848”
namespace = “”
group = “SEATA_GROUP”
username = “nacos”
password = “nacos”
}
}
下载文件 https://gitee.com/seata-io/seata/tree/develop/
找到里面那个的script文件夹(解压)
进入到\script\config-center 这个路径下看到一个叫 config.txt的文件
把里面的配置改为:
解释重要的部分:
service.vgroupMapping.fsp_tx_group=default ****当中的 fsp_tx_group可以自定义 后面的值可以等于一个其他的seata服务名具体看官网配置
在修改一下数据连接信息 我这里采用的是 mysql8.0的配置
service.vgroupMapping.fsp_tx_group=default
service.default.grouplist=127.0.0.1:8091
client.rm.sqlParserType=druid
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
store.db.user=root
store.db.password=root
修改完毕过后
进入到\script\config-center\nacos 这个路径你就可以看到一个叫 nacos-config.sh的执行文件
如果你有git了 直接双击 没有记得下载即可 不会下载的百度
双击过后ta开始进行配置上传到我们的nacos的配置中心去
现在我们的seata的配置就基本上完成了
需要额外的配置可以去seata的官网:http://seata.io/zh-cn/
现在我们来 运行我们配置好得seata
打开setat/bin/ 点击 seata-server.bat
到这里我们的seata就配置完成了
微服务版本和seata的兼容
父pom
<!–统一管理jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.18.12</lombok.version>
<mysql.version>8.0.19</mysql.version>
<spring.boot.version>2.2.5.RELEASE</spring.boot.version>
<spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
<mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
</properties>
<!–子模块继承后,提供作用:锁定版本+子module不用groupId和version–>
<dependencyManagement>
<dependencies>
<!–springboot 2.2.2–>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>KaTeX parse error: Expected 'EOF', got '&' at position 22: …g.boot.version}&̲lt;/version>…{spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</dependencyManagement>
seata整合spring boot
<!-- seata -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-seata</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<!–Druid数据源–>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
properties.yml 不需要额外的配置
seata:
tx-service-group: fsp_tx_group # 事分组名 与我们上面配置的一定要一致不然就会出现找到seata服务!!!!!
service:
vgroup-mapping:
# 保持一致
fsp_tx_group: default
registry:
nacos:
namespace: 4da028aa-00a3-4e90-9fb1-59e23073c124 #seata 注册在那个地方