Spring Cloud Feign 之自定义配置
环境信息: java 1.8、Spring boot 1.5.10.RELEASE、spring cloud-Edgware.SR3、maven 3.3+
使用Feign
默认配置可能不能满足需求,这时就需要我们实现自己的Feign
配置,如下几种配置
application.properties(.yml)
全局和局部(针对单个Feign接口),包含以下配置
spring java config
全局配置和局部(针对单个Feign接口)
application.properties(.yml)配置文件和java config的优先级
下面代码就是处理配置使之生效,FeignClientFactoryBean#configureFeign
:
protected void configureFeign(FeignContext context, Feign.Builder builder) {
//配置文件,以feign.client开头
FeignClientProperties properties = applicationContext.getBean(FeignClientProperties.class);
if (properties != null) {
if (properties.isDefaultToProperties()) {
//使用java config 配置
configureUsingConfiguration(context, builder);
//
configureUsingProperties(properties.getConfig().get(properties.getDefaultConfig()), builder);
configureUsingProperties(properties.getConfig().get(this.name), builder);
} else {
configureUsingProperties(properties.getConfig().get(properties.getDefaultConfig()), builder);
configureUsingProperties(properties.getConfig().get(this.name), builder);
configureUsingConfiguration(context, builder);
}
} else {
configureUsingConfiguration(context, builder);
}
}
所有配置都是单个属性覆盖,如果对 Spring boot
配置优先级有所了解
第一种:配置文件无配置
使用 java config
配置,优先级有低到高进行单个配置覆盖
1、FeignClientsConfiguration
Spring Cloud Feign 全局默认配置。
2、@EnableFeignClients#defaultConfiguration
自定义全局默认配置。
3、FeignClient#configuration
单个Feign
接口局部配置。
第二种:feign.client.default-to-properties=true(默认true)
java config
和application.properties(.yml)
配置,优先级有低到高进行单个配置覆盖
1、FeignClientsConfiguration
Spring Cloud Feign 全局默认配置。
2、@EnableFeignClients#defaultConfiguration
自定义全局默认配置。
3、FeignClient#configuration
单个Feign
接口局部配置。
4、application.properties(.yml)
配置文件全局默认配置,配置属性feign.client.default-config
指定默认值(defult),如何使用,在application.properties(.yml)配置文件应用小节讲解
5、application.properties(.yml)
配置文件局部配置,指定@FeignClient#name
局部配置。
第三种:feign.client.default-to-properties=false(默认true)
java config
和application.properties(.yml)
配置,优先级有低到高进行单个配置覆盖
1、application.properties(.yml)
配置文件全局默认配置,配置属性feign.client.default-config
指定默认值(defult),如何使用,在application.properties(.yml)配置文件应用小节讲解
2、application.properties(.yml)
配置文件局部配置,指定@FeignClient#name
局部配置。
3、FeignClientsConfiguration
Spring Cloud Feign 全局默认配置。
4、@EnableFeignClients#defaultConfiguration
自定义全局默认配置。
5、FeignClient#configuration
单个Feign
接口局部配置。
application.properties(.yml)配置文件应用
支持以下配置项:
private Logger.Level loggerLevel;//日志级别
private Integer connectTimeout;//连接超时时间 java.net.HttpURLConnection#getConnectTimeout(),如果使用Hystrix,该配置无效
private Integer readTimeout;//读取超时时间 java.net.HttpURLConnection#getReadTimeout(),如果使用Hystrix,该配置无效
private Class<Retryer> retryer;//重试接口实现类,默认实现 feign.Retryer.Default
private Class<ErrorDecoder> errorDecoder;//错误编码