mysql+xf01x_Seata1.3+nacos+mysql8.x整合

Seata1.3+nacos+mysql8.x整合配置

1.先确定Seata版本

spring-cloud-alibaba使用2.2.1.RELEASE版

seata使用1.3版本,包括seata服务端(就是seata-server)、使用seata的各种微服务端(后面统称seata客户端),都使用1.3版本

2.下载Seata1.3版本的源码和Server版

3.配置Seata服务端的mysql数据库

先去mysql创建数据库seata

去源码目录/script/server/db找到mysql.sql,在seata数据库下执行

执行成功,可以看到多出了3张表

20201005222651250625.png

4.配置Seata服务端的配置列表

到源码目录/script/config-center中配置config.txt

config.txt列表很长,都是默认配置,不需要全部保留,只保留修改项即可。我们是用mysql进行数据存储,所以可以保留如下配置。注意:笔者下面文件的注释是方便读者理解的,实际上不能保留,自己配置的时候请删除(否则后面推送到nacos会报错)。

# 【重要】my_test_tx_group这个事务分组所使用的seata-server的集群名称,要与后面seata-server中registry.conf的registry.nacos.cluster保持一致

service.vgroupMapping.my_test_tx_group=testCluster

# 使用db存储

store.mode=db

store.db.datasource=druid

store.db.dbType=mysql

# 因为是mysql8.x版本,驱动位置发生了改变(有了.cj)

store.db.driverClassName=com.mysql.cj.jdbc.Driver

# mysql8.x版本serverTimezone需要按照下面设定(否则会报serverTimezone错误,一堆乱码)。另外 这个属性在推送到nacos之后参数可能会消失,需要手动修改以下

store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&serverTimezone=GMT%2B8

store.db.user=root

store.db.password=root

到源码目录/script/config-center/nacos目录下,执行nacos-config.sh脚本(此命令依赖于git,可能需要读者自己安装)

.\nacos-config sh -h nacos的Ip地址 -p nacos的端口号 -u nacos用户名 -w nacos密码 -g 本配置列表的所属分组(要与后面seata服务端config.nacos.group保持一致,默认为SEATA_GROUP)

例如笔者命令为

.\nacos-config sh -h localhost -p 1111 -u nacos -w nacos -g SEATA_GROUP

推送之后,可以查看nacos的配置列表

20201005222651375429.png

另外需要查看store.db.url中参数是否丢失,如果丢失要重新配置一下

5.配置Seata服务端并启动

到seata-server目录/conf/中

配置registry.conf

# 注册中心

registry {

# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa

# 如果是file,则需要配置file.conf

# 因为本例使用nacos,此处填写nacos

type = "nacos"

# 【重要】此处是nacos中的服务注册配置

nacos {

# 【重要】本服务端在nacos中的微服务名称,后面seata客户端的application.yml中要用到

application = "seata-server"

# nacos地址(默认为8848,笔者此处做了负载均衡改了端口)

serverAddr = "localhost:1111"

# seata-server微服务的分组

group = "SEATA_GROUP"

# seata-server微服务的命名空间,此处省略,使用默认值public

namespace = ""

# 【重要】seata-server作为集群时的集群名字,与前面nacos中设定事务分组属性(service.vgroupMapping.my_test_tx_group)保持一致

cluster = "testCluster"

# nacos1.2加入了鉴权,账号密码不可省略

username = "nacos"

password = "nacos"

}

}

# 配置中心

config {

# file、nacos 、apollo、zk、consul、etcd3

# 因为本例使用nacos,此处填写nacos

type = "nacos"

nacos {

serverAddr = "localhost:1111"

namespace = ""

# 【重要】本服务端的配置在nacos配置列表哪个分组下,要与上面推送到nacos的分组列表保持一致,默认是SEATA_GROUP。

group = "SEATA_GROUP"

username = "nacos"

password = "nacos"

}

}

因为服务注册和服务配置都是使用的nacos,所以读者这里并不需要file.conf中的任何属性,自然也不需要改动。后面需要修改配置直接在nacos中修改,SEATA_GROUP分组。

切换到/bin/文件夹下,准备启动seata服务端,命令如下

.\seata-server.bat -p 要使用的端口号

笔者默认8091端口被占用了,所以使用了8093端口,命令如下

.\seata-server.bat -p 8093

没有报错,则去查看nacos服务列表

20201005222651547033.png

并且也要确认集群名称是否正确

20201005222651640635.png

6.配置Seata客户端并启动

引入POM依赖,因为spring-cloud-starter-alibaba-seata集成的1.1版本的seata,所以需要排除之后引入1.3版本的。笔者此处只写了spring-cloud-alibaba下的seata的依赖,其余依赖请读者自己配置。

com.alibaba.cloud

spring-cloud-starter-alibaba-seata

io.seata

seata-spring-boot-starter

io.seata

seata-spring-boot-starter

1.3.0

配置application.yml。同样笔者只写了seata配置,其余配置请读者自己写。

seata:

# 开启自动装配

enabled: true

# 本客户端的微服务名称

application-id: seata-order-service

# 读取哪个事务分组

# 例如此时会读取 SEATA_GROUP 这个分组下的 service.vgroupMapping.my_test_tx_group 这个属性的值。从上面的配置可以知道笔者此处的最终值为 testCluster。后面程序运行会找到 testCluster 这个集群的seata服务端,进行通讯。

tx-service-group: my_test_tx_group

# 配置中心设置

config:

type: nacos

nacos:

username: nacos

password: nacos

server-addr: localhost:1111

# 读取的配置分组

group: SEATA_GROUP

# 注册中心设置

registry:

type: nacos

nacos:

# SEATA服务中心的微服务名,此处与服务端保持一致

application: seata-server

server-addr: localhost:1111

username: nacos

password: nacos

因为笔者的seata客户端配置也是使用的nacos,所以项目中并不需要file.conf这个文件。后面需要修改配置直接在nacos中修改,SEATA_GROUP分组。

增加seata代理数据源的配置

添加DataSourceProxyConfig类

package com.zhoushiya.springcloud.alibaba.config;

import com.alibaba.druid.pool.DruidDataSource;

import io.seata.rm.datasource.DataSourceProxy;

import org.apache.ibatis.session.SqlSessionFactory;

import org.mybatis.spring.SqlSessionFactoryBean;

import org.mybatis.spring.transaction.SpringManagedTransactionFactory;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

/**

* 使用seata对数据源进行代理

* @author zhoushiya

* @date 2020/10/4 16:12

*/

@Configuration

public class DataSourceProxyConfig {

// mybatis的mapper文件夹地址

@Value("${mybatis.mapper-locations}")

private String mapperLocations;

@Bean

@ConfigurationProperties(prefix = "spring.datasource.druid")

public DataSource druidDataSource() {

DruidDataSource druidDataSource = new DruidDataSource();

return druidDataSource;

}

@Bean

public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {

SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();

factoryBean.setDataSource(dataSource);

factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()

.getResources(mapperLocations));

return factoryBean.getObject();

}

}

修改主启动类

@EnableDiscoveryClient

@EnableFeignClients

// 取消数据源的自动创建,使用Seata对数据源进行代理

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

// 导入自定义数据源配置

@Import({DataSourceProxyConfig.class})

public class OrderServiceMain2001 {

public static void main(String[] args) {

SpringApplication.run(OrderServiceMain2001.class,args);

}

}

启动seata客户端,检查状态是否成功

控制台输出连上服务端

20201005222651703037.png

seata服务端显示已连上

20201005222651827840.png

nacos中服务已注册

20201005222651937043.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值