所以,如果你单独使用Feign的时候,你就可以通过如上的两种方式来设置超时时间。
SpringCloud下Feign单独使用超时时间设置在SpringCloud环境下,只是对Feign进行了一层包装,所以即使没有Ribbon和注册中心,Feign也是可以单独使用的,但是用法有点变化
- 注解都换成SpringMVC的注解
- 接口上需要加@FeignClient注解
- 用@EnableFeignClients扫描这些接口
不过,默认情况下Feign还是需要结合Ribbon来使用的
如果你只想单独使用Feign,那么就设置一下@FeignClient注解的url属性,指定请求的地址和端口就可以了
所以,既然只是包装,前面提到的两种方式设置超时时间当然可以继续使用:
- 通过Feign.Builder
- 通过接口的方法参数
方法参数设置形式跟前面提到的一模一样,但是通过Feign.Builder来设置却不太一样
由于SpringCloud会自己创建Feign.Builder,不需要我们创建,所以在设置Options时,Spring提供了两种快捷方式来设置
不过最终还是设置到Feign.Builder中
1、声明一个Options BeanSpring在构建Feign.Builder的时,会从容器中查找Options这个Bean,然后设置到Feign.Builder中
@Configuration
public class Feignconfiguration {
@Bean
public Request.Options options() {
return new Request.Options(8, TimeUnit.SECONDS, 8, TimeUnit.SECONDS, true);
}
}
此时debug就可以看到设置到Feign.Builder的代码
2、配置文件中设置这段代码在FeignClientFactoryBean中的configureUsingConfiguration方法中
除了声明Bean之外,Spring还提供了通过配置文件的方式配置,如下:
feign:
client:
config:
default:
connectTimeout: 10000
readTimeout: 10000
同样地,debug就可以看见
这段代码在FeignClientFactoryBean中的configureUsingConfiguration方法中
声明Bean和配置文件都可以设置,那么同时设置哪种优先级高呢?
如无特殊配置,遵守SpringBoot本身的配置规定
约定 > 配置 > 编码
所以基于这个规定,配置文件的配置优先级大于手动声明Bean的优先级。
到这,我们又学到了两种Spring为了方便我们设置Feign.Builder提供的配置方式:
- 声明Options Bean
- 配置文件
把他们俩加到前面画的图中