记录一下springcloud alibaba seata的分布式事务

这个官方有一定的资料  但是好像个人写的并不是很多  找到几篇有帮助的 顺便记录一下我自己的配置

https://blog.csdn.net/u013058742/article/details/104063203

https://blog.csdn.net/Byppfeng/article/details/100698586

https://blog.csdn.net/weixin_39800144/article/details/103726228

先附上我的所有版本

spring boot:2.1.6

springcloud:Greenwich.sr2

springcloud alibaba:2.1.0

首先在seata官网上下载seata 发行版  目前已经有1.0.0 但是我这里使用的是0.9.0

https://seata.io/zh-cn/blog/download.html

进入

https://seata.io/zh-cn/docs/user/quickstart.html 或者 https://github.com/seata/seata/tree/develop/script/server/db

执行其中的脚本  在数据库中建立分布式事务所需要的表

其实这里不需要这么多 我是全部执行了

下载seata解压后进入${seata.home}/conf/

修改registry.conf

这里我使用的是nacos 配置nacos的地址 

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"
  nacos {
    serverAddr = "localhost"
    namespace = ""
    cluster = "default"
  }
}
config {
  # file、nacos 、apollo、zk、consul、etcd3
  typ = "nacos"
  nacos {
    serverAddr = "localhost"
    namespace = ""
  }
}

然后修改nacos-config。txt

修改store.db下的数据库相关选项   我这里使用的是mysql

这里需要注意的是上面的   ehcms_tx_group 是你的分布式事务的分组名   

如果你需要弄多个组  就需要配置多个

然后保存   执行 ${seata_home}/conf/下的 nacos-config.sh  参数指定为 nacos地址 比如 ./nacos-config.sh 127.0.0.1

执行之后返回nacos  会发现 nacos 配置列表中多了很多配置  就说明成功了

然后启动seata 

返回nacos 查看服务列表 发现列表中多了 serverAddr 说明 seata启动成功

在代码中 :

项目pom引入

将服务端的registry.conf 文件拷贝到项目的resource目录下

在application.yml文件中增加 刚才在seata配置文件中的事务组

因为seata的事务是需要对datasource进行代理的    所以这里配置一下datasource的代理

@Configuration
public class SeataConfiguation {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }

    @Primary
    @Bean("dataSource")
    public DataSourceProxy dataSource(DataSource druidDataSource){
        return new DataSourceProxy(druidDataSource);
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSourceProxy dataSourceProxy)throws Exception{
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSourceProxy);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath*:/mapper/*.xml"));
        sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
        return sqlSessionFactoryBean.getObject();
    }

}

这里我并不清楚是否只在最外层加

我将springcloud 的provider consumer 还有 全部配置了datasource的代理

在调用方法的地址加入注解

经测试 当报错时 并没有保存数据库  说明分布式事务完成 我这里使用的是dubbo的rpc调用

发布了11 篇原创文章 · 获赞 0 · 访问量 447

猜你喜欢

转载自blog.csdn.net/qq_34225210/article/details/104322081