【springboot3.x 记录】关于spring-cloud-gateway引入openfeign导致的循环依赖问题

最近升级springboot3真是一挖一个坑,又给我发现了 spring-cloud-gateway 引入 openfeign 会导致循环依赖异常,特此记录一下这个坑

一、发现问题

网关里面有一个全局的过滤器,因为要查询一些配置信息,目前是通过 feign client 的方式来调用接口获取信息,一直运行正常。

在升级完 gateway 网关的依赖包后,打算运行一下项目,却发现过滤器里面报了循环依赖的异常。

【springboot3.x 记录】关于spring-cloud-gateway引入openfeign导致的循环依赖问题_第1张图片

之前运行得好好地,为什么升级依赖包以后会报异常呢?

二、分析问题

从上面图也能清楚地看到,就是A依赖B,B依赖C,C又依赖A,导致循环依赖,但是我项目里面只有一个 filter 过滤器,而且 feign client 的服务也只是注入调用了一个,怎么就出问题了呢。

1.翻查资料

于是翻查了一下github的 issue ,发现有人也遇到此类问题,如下图

【springboot3.x 记录】关于spring-cloud-gateway引入openfeign导致的循环依赖问题_第2张图片

好家伙,原来 gateway 里面的 filter 本身就不能使用 feign,而且时间是2019年的时候,那我之前为什么能用...

2.继续跟踪

刚好,给我发现了一篇文章,说到了这个类似的问题的原因,博主一步步debug源码分析,传送门

大致的问题出在框架本身、 feign client 加载 、过滤器加载顺序有关,导致最终被加载了两次,具体的分析方法文章博主也很详细的说明,在此就不再描述。

这里也有一篇文章是关于 GatewayAutoConfiguration 源码分析,有兴趣的也可以看一下。

三、解决问题

貌似这个问题无解,那总不能改用 web client 吧,于是找找有没有"偏门"的方法解决这个问题,最终还真找到一个简单的方式。

【springboot3.x 记录】关于spring-cloud-gateway引入openfeign导致的循环依赖问题_第3张图片

只要在 feign client 服务的加上 Lazy 注解,让其延迟注入,问题解决。

你可能感兴趣的:(gateway,spring,boot,spring,cloud)