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