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