Feign客户端自定义配置不生效

问题描述 投票:0回答:1

我在我的项目中使用 feign。我创建了自定义配置,但它被默认配置覆盖。步骤如下:

SpringBootApplication.java

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class MyApplication {}

FeignConfiguration.java

@RequiredArgsConstructor
public class FeignConfiguration{

private final MyConfigurationProperties myConfigProperties;

@Bean
public MetaDataRestClient metaDataRestClient(@Qualifier("metaDataHttpClient") okhttp3.OkHttpClient metaDataHttpClient) {
    return Feign.builder()
            .retryer(Retryer.NEVER_RETRY)
            .client(new OkHttpClient(metaDataHttpClient))
            .encoder(new JacksonEncoder(XML_MAPPER))
            .decoder(new JacksonDecoder(XML_MAPPER))
            .contract(new SpringMvcContract())
            .logger(new Slf4jLogger(MetaDataRestClient.class))
            .logLevel(Logger.Level.FULL)
            .target(MetaDataRestClient.class, myConfigProperties.getMetadata().getEndpoint());
}

@Primary
@Bean(name = "metaDataHttpClient")
public okhttp3.OkHttpClient metaDataHttpClientWithProxy() {
    return OkHttpUtil.createNewHttpClientBuilderWithProxy(myConfigProperties.getMetadata().getFeignClient().getConnectTimeout(),
            myConfigProperties.getMetadata().getFeignClient().getReadTimeout()).build();
}

MetaDataRestClient.java

@FeignClient(name = "metaDataRestClient", url = "https://myurl.net", configuration = FeignConfiguration.class)
public interface MetaDataRestClient {

    @Headers("Content-Type: text/xml")
    @GetMapping("/metadata")
    public EntityDescriptor getMetadaData();

}

我看到

metaDataRestClient
bean 在启动时被触发,但是当我深入研究 feign 库代码时,我发现这个方法被触发了两次:第一次使用我的自定义 OkHttpClient,第二次使用名为
org.springframework.cloud.sleuth.instrument.web.client.feign.LazyClient
的东西。所以我的自定义 OkHttpClient 被这个懒惰的客户端覆盖了。

这里是被触发两次的相关Feign库代码:

FeignBuilder.java

 public Builder client(Client client) {
   this.client = client;
   return this;
}

我的 application.yaml 文件中没有任何假配置。这可能是什么原因?

谢谢。

spring-boot spring-cloud-feign feign
1个回答
0
投票

同样的问题,你解决了吗?如果解决了怎么解决。

© www.soinside.com 2019 - 2024. All rights reserved.