在学习Seata过程中,偶然发现了一个坑,这里做个记录
环境说明
先说下我的环境,我是搭建了一个SpringCloud微服务,然后A服务调用B服务,然后在这两个服务都集成了Seata,集成过程是没有问题的,业务场景是注册场景,A服务中需要操作向A1、A2这两张表加入数据,同时通过OpenFeign向B微服务发请求,向B微服务的数据库中的B1、B2两张表添加数据,就是这么一个场景
测试了很多次发现,当发生异常后,A库里的A1、A2表数据确实回滚了,没有新增成功,但是B库中的B1、B2表数据却新增进去了,所以Seata失效了,没有起到作用
原因分析
这个问题困扰了很久,最终发现是一个配置类导致的,就是我项目中有一个配置类继承了WebMvcConfigurationSupport这个类,就出现问题了
解决方案
解决方案很简单,就是不要继承WebMvcConfigurationSupport类,改为实现WebMvcConfigurer接口就可以完美解决问题了,再测试就发现Seata可以处理分布式事务了,4张表都可以回滚了
其实,这里我还没有搞清楚底层是什么原因导致的,为什么继承WebMvcConfigurationSupport类就会出现问题,一直没有没有时间去深扒源码,哪位大神路过的可以留言赐教一下,多谢!