Spring Cloud Feign Client decode404配置跨客户端异常持久化问题
问题与分析:Feign Client decode404属性污染问题
问题场景
- 基于Spring Boot构建的多Feign Client应用,所有客户端均通过
@FeignClient注解配置 - 采用Hystrix作为容错组件,已在Spring上下文定义
Feign.Builder类型Bean,实例为HystrixFeign.builder() - 当其中一个Feign Client显式设置
decode404=true(新版Feign中该属性更名为dismiss404)后,后续初始化的其他默认decode404=false的Feign Client,该属性也被自动设置为true
根因
Spring上下文中的Feign.Builder实例是共享的,在配置第一个开启decode404的客户端时,Builder的属性被修改但未重置,后续客户端复用了这个被污染的Builder实例,导致属性被意外继承
复现版本
- Spring Cloud Open Feign 3.1.3(依赖OpenFeign 11.8)
- Spring Cloud Open Feign 2.2.1.RELEASE(依赖OpenFeign 10.4)
- 新版Feign中属性名改为
dismiss404,但Builder实例复用导致的属性污染逻辑未发生变化
临时方案(不符合预期)
目前仅能通过手动在每个Feign Client配置前重置Feign.Builder的对应属性来规避,但该方案需要侵入配置逻辑,不符合Spring自动配置的预期设计
内容的提问来源于stack exchange,提问作者A. Adiego
相关产品推荐
相关产品推荐

