seata1.2整合

seata1.2.0 seata1.3.0 seata1.4.2大同小异
官方版本升级指南
http://seata.io/zh-cn/docs/ops/upgrade.html
有疑问可以留言
一、下载安装配置
1)、下载seata-server-1.2.0同时下载seata-1.2.0.zip代码
https://github.com/seata/seata/releases
2)、打开seata-1.2.0.zip源码目录:script/config.txt
里边大都是默认的不需要改,也不需要留,只留下更改的一些就好了
在这里插入图片描述

# 【重要】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

3)、打开源码目录:/script/nacos/,执行nacos-config.sh脚本,使用git bash窗口执行

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

可以参考笔者为:

sh nacos-config.sh -h 172.18.64.131 -p 8848 -u nacos -w nacos -g SEATA_GROUP

4)、执行成功在nacos注册中心配置管理-配置列表可看到:
在这里插入图片描述
5)、检查
查看store.db.url中参数是否丢失,如果丢失要重新配置一下

此步骤为推送参数配置至nacos,配置中心使用的也是nacos
二、配置seata所需mysql数据库
1)、先创建数据库,名为seata
2)、打开源码目录/script/server/db取mysql.sql,执行脚本至先前建好的seata数据库
3)、执行成功可看到
在这里插入图片描述
三、配置seata服务并启动
1)、到seata-server1.2目录/config/下
2)、配置registory.config

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  # 如果是file,则需要配置file.conf
  # 因为本例使用nacos,此处填写nacos
  type = "nacos"
  nacos {
  # 【重要】本服务端在nacos中的微服务名称,后面seata客户端的application.yml中要用到
    application = "seata-server"
	# nacos地址
    serverAddr = "172.17.64.130:8848"
	# 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
  type = "nacos"
  nacos {
    serverAddr = "172.17.64.130:8848"
    namespace = ""
	# 【重要】本服务端的配置在nacos配置列表哪个分组下,要与上面推送到nacos的分组列表保持一致,默认是SEATA_GROUP。
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
  }
}

3)、因为服务注册和服务配置都是使用的nacos,所以读者这里并不需要file.conf中的任何属性,自然也不需要改动。后面需要修改配置直接在nacos中修改,SEATA_GROUP分组
4)、切换至/bin/目录,执行bat脚本准备启动
内存不够可以更改的小点
在这里插入图片描述
5)、naocs控制台可以看到
在这里插入图片描述
在这里插入图片描述
四、客户端改造
1.首先要看spring-cloud-alibaba组件版本说明:

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

在这里插入图片描述
2.笔者因为项目以前接nacos时Spring Cloud Alibaba Version使用的是2.2.1.RELEASE,所以只能使用Seata Version为1.20的版本,不注意这里很容易有意想不到的错误
3.配置pom

<!-- 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.2.0</version>
        </dependency>

3.配置application.yml,这里只有seata的配置

mybatis:
  mapperLocations: classpath:mapper/*.xml
seata:
  # 开启自动装配
  enabled: true
  # 本客户端的微服务名称
  application-id: seata-account-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: 172.18.64.131:8848
      # 读取的配置分组
      group: SEATA_GROUP
  # 注册中心设置
  registry:
    type: nacos
    nacos:
      # SEATA服务中心的微服务名,此处与服务端保持一致
      application: seata-server
      server-addr: 172.18.64.131:8848
      username: nacos
      password: nacos

4.使用seata代理数据源的配置
1)、添加DataSourceProxyConfig配置类

package com.kasinf.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.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;


@Configuration
public class DataSourceProxyConfig {


    @Value("${mybatis.mapperLocations}")
    private String mapperLocations;
    
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource(){
        return new DruidDataSource();
    }
    @Bean
    public DataSourceProxy dataSourceProxy(DataSource dataSource) {
        return new DataSourceProxy(dataSource);
    }
    @Bean
    public SqlSessionFactory sqlSessionFactoryBean(DataSourceProxy dataSourceProxy) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSourceProxy);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
        sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
        return sqlSessionFactoryBean.getObject();
    }
}

2)、修改启动类

// 取消数据源的自动创建,使用Seata对数据源进行代理
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
@EnableFeignClients
public class SeataOrderMainApp2001 {
    public static void main(String[] args) {
        SpringApplication.run(SeataOrderMainApp2001.class, args);
    }
}

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

在这里插入图片描述
nacos服务列表
在这里插入图片描述
问题:seata 1.2/seata1.3/seata1.4.2问题
1.can not get cluster name in registry config ‘service.vgroupMapping.account-service-fescar-service-group’, please mak

这类都是配置有误,读取不到正确位置的配置
1.namespace
2.group
3.tx-service-group: my_test_tx_group

参考:作者:zhoushiya,
https://www.cnblogs.com/zhoushiya/p/13770494.html

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值