博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次springcloud+seata事务不进行回滚
阅读量:4027 次
发布时间:2019-05-24

本文共 1252 字,大约阅读时间需要 4 分钟。

不想看分析的。直接翻到最低。看解决方案

springcloud增加seata maven依赖

com.alibaba.cloud
spring-cloud-alibaba-seata
2.1.0.RELEASE
seata-all
io.seata
io.seata
seata-all
0.9.0

 

在application.yml中增加seata实例名以及增加file.conf和registry.conf。这两个文件可以直接从seata服务中拷贝

然后我准备了三个服务和一个注册中心eureka.

 

orders-service中调用user-service ,user-service 中调用product-service。启动注册中心和orders-service,user-service。product-service不启动。

然后请求。异常有抛出。就一直未回滚事务。数据还入了库。最后通过源码分析。我断定应该undo_log数据未进行插入。打个断点果然undo_log这个表。一直就没有数据。undo_log这个表的意义就在。暂存上一个节点提交的事务。如果有异常。就会把这个数据回滚掉。也就是说下图这段代码肯定是没走

最后翻翻源码发现。这个代理连接的类。是被DataSourceProxy调用的

 哦哦。那问题大致就出来了。也就是数据源。我要把这个DataSourceProxy进行配置下咯

 

重新启动。然后就这样解决了。

解决方案:加入以下配置(注意:DataSourceProxy是seata包下的

@Beanpublic SqlSessionFactoryBean sqlSessionFactoryBean(){   SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();    sqlSessionFactoryBean.setDataSource(dataSourceProx());   return sqlSessionFactoryBean;}@Bean@ConditionalOnBean(DataSource.class)public DataSourceProxy dataSourceProx() {    return new DataSourceProxy(dataSource);}

项目我已放到gitee上 。需要的自取参考

转载地址:http://umvbi.baihongyu.com/

你可能感兴趣的文章
python jieba分词模块的基本用法
查看>>
[CCF BY C++]2017.12 最小差值
查看>>
[CCF BY C++]2017-12 游戏
查看>>
如何打开ipynb文件
查看>>
[Leetcode BY python ]190. Reverse Bits
查看>>
面试---刷牛客算法题
查看>>
Android下调用收发短信邮件等(转载)
查看>>
Android中电池信息(Battery information)的取得
查看>>
SVN客户端命令详解
查看>>
Android/Linux 内存监视
查看>>
Linux系统信息查看
查看>>
用find命令查找最近修改过的文件
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
在android上运行native可执行程序
查看>>
Phone双模修改涉及文件列表
查看>>
android UI小知识点
查看>>
Android之TelephonyManager类的方法详解
查看>>
android raw读取超过1M文件的方法
查看>>
ubuntu下SVN服务器安装配置
查看>>
MPMoviePlayerViewController和MPMoviePlayerController的使用
查看>>