feign本身是通过FeignClientFactoryBean
创建出来的,feign的超时配置也在方法org.springframework.cloud.openfeign.FeignClientFactoryBean#configureUsingConfiguration
中。此方法properties.isDefaultToProperties()
的默认值是true,我们一般也不会去改它,所以一般是执行红方框中的逻辑。(1)先执行全局配置configureUsingConfiguration(context, builder)
,(2)再执行属性配置类中FeignClientProperties
的默认配置, (3)最后执行属性配置类FeignClientProperties
中当前feign client特定的配置。这三个步骤的覆盖顺序是后者覆盖前者,也就是越往后优先级越高。默认情况下我们未做任何配置时,FeignClientProperties
是空对象,也就是说此时只会执行步骤(1)
的属性配置。
全局属性配置方法org.springframework.cloud.openfeign.FeignClientFactoryBean#configureUsingConfiguration
回到spring容器中去取超时配置对象Request.Options
自动配置类相应方法为我们配置了一个Request.Options
对象(当spring容器中不存在此类型的bean时),
而LoadBalancerFeignClient.DEFAULT_OPTIONS
的连接超时、读超时分别是10s、60s.
public class LoadBalancerFeignClient implements Client {
static final Request.Options DEFAULT_OPTIONS = new Request.Options();
//.....
}
public static class Options {
private final long connectTimeout;
private final TimeUnit connectTimeoutUnit;
private final long readTimeout;
private final TimeUnit readTimeoutUnit;
private final boolean followRedirects;
//.......
/**
* Creates the new Options instance using the following defaults:
* <ul>
* <li>Connect Timeout: 10 seconds</li>
* <li>Read Timeout: 60 seconds</li>
* <li>Follow all 3xx redirects</li>
* </ul>
*/
public Options() {
this(10, TimeUnit.SECONDS, 60, TimeUnit.SECONDS, true);
}
//.......
}