标签:数据 str stc 空格 uid conf sources 引入 exce
seata服务端
(就是seata-server)、使用seata的各种微服务端(后面统称seata客户端
),都使用1.3版本/script/server/db
找到mysql.sql,在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的配置列表
另外需要查看store.db.url中参数是否丢失,如果丢失要重新配置一下
到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服务列表
并且也要确认集群名称是否正确
引入POM依赖,因为spring-cloud-starter-alibaba-seata
集成的1.1版本的seata,所以需要排除之后引入1.3版本的。笔者此处只写了spring-cloud-alibaba下的seata的依赖,其余依赖请读者自己配置。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
配置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客户端,检查状态是否成功
控制台输出连上服务端
seata服务端显示已连上
nacos中服务已注册
标签:数据 str stc 空格 uid conf sources 引入 exce
原文地址:https://www.cnblogs.com/zhoushiya/p/13770494.html