这个官方有一定的资料 但是好像个人写的并不是很多 找到几篇有帮助的 顺便记录一下我自己的配置
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调用