- 错误场景
在测试环境发布流水线时,启动报错
解决思路
1 根据错误提示,项目中有存在feign名字重复的 Feign 客户端。
@FeignClient(name = "xxx", contextId = "xx")
然后本地搜索,本以为加上 contextId标签就可以了,但是没有搜索到。
2.由于我们是微服务,就想到 会不会引用的jar包中,本次改动 有重复的呢? 切换本次改动的其他服务,然后全局搜索,还是没有。
3.这是根据 报错提示 'C.FeignClientSpecification'中的 C, 猜想间接引用jar包吗? 为了得到验证, 从git上获取C项目,全局搜索 @FeignClient 并没有发现重复。
4.这时不得不提到 我们程序员的 强大想象力了 😂
之前同事打的C项目 最新的包 1.1.1 是对的,但是上一个版本 1.1.0中出现了重复的feign.
所以你拉取了最新的C项目,在项目中搜索 并没有重复的feign. 也是猜想到 A 引用B, B引用C. 怀疑 B引用的C不是最新的包 本身那个版本就有问题。
于是验证一下
从公司私服上拉取名为 C 的项目, mac使用 JU-GUI本地反编译 ,找到feign 重复的客户端。
解决方案
修改 @FeignClient(name = "aa", contextId = "bb") 加上 contextId标识,最好保持跟接口名一致, 就不会重复。 因为bean 不可能重复,即使重复 编译就会立即报错。
@FeignClient(name = "aa", contextId = "bb")
public interface bb {
xxxxx
}
---------------------------
@FeignClient(name = "aa", contextId = "cc")
public interface cc {
xxxxx
}
发布上去之后 由于缓存 公司私服并没有实时更新,不用怀疑,直接升级C项目、B项目 版本,重新打包上传私服。
完美解决👍