Feign配置原理

背景

今天项目开发过程中,需要在给别人提供的feign的spi中添加一些功能,让调用方通过我提供的Feign调用的时候能额外加一个请求头,配置代码如下:

@Configuration
@ConditionalOnProperty(value = "api.audit.log.enabled", matchIfMissing = true)
public class DemoFeignClientConfig {
    @Value("${spring.application.name:UNKNOWN}")
    private String appName;
    @Bean
    public RequestInterceptor headerInterceptor() {
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate requestTemplate) {
                requestTemplate.header(HEADER_APP_NAME, appName);
            }
        };
    }
}

同时在提供的jar包的resources/META-INF/spring.factories下配置,这个不懂的可以搜索spring.factories机制

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.platform.config.DemoFeignClientConfig

此时当调用方依赖了这个spi包后,上面的配置就会生效,发出请求的时候会过这个RequestInterceptor,在请求头上加入应用名,但此时有个问题,那就是这个RequestInterceptor是全局的,也就是说不止是调我这个spi时会被加上这个请求头,通过feign调用其他服务时也会被加上这个请求头,RequestInterceptor当被全局加载后破坏性还不是很大,因为在Feign的源码中可以看到RequestInterceptor时会加载多个的(下面代码),所以顶多就是多了个header,但是如果上面配置了自己的encoderdecoder,那可就要出大问题了,如果调用方没有配置自己特殊的encoderdecoder,那就会把Feign默认的FeignClientsConfiguration配置的给覆盖掉,如果调用方配置了自己的encoderdecoder,那就直接启动不了了,无论哪种情

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值