Feign全局配置和局部配置
在使用Feign的時候需要注意是否為全局配置和局部配置,否則可能會導致各種奇怪異常,而且在調試的是否也不容易看出問題。全局配置和局部配置的差別比較微妙,稍不注意可能會出問題。因此,這里總結給大家,防止大家也出現異常的問題。
全局配置:
@Configuration
public class FeignConfiguration {
@Bean
public FeignBasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new FeignBasicAuthRequestInterceptor();
}
}
全局配置時不要在@FeignClient中使用configuration屬性,雖然這樣也不會拋錯,這里一定要注意。
@FeignClient(
value = StandardServiceAPI.SERVICE_NAME,
url = "${spring.gateway.host}:${spring.gateway.port}",
configuration = FeignConfiguration.class
)
注意:
- 全局配置的時候,就不需要在具體的FeignClient類中再配置configuration屬性了。
- 全局配置會使得所有的@FeignClient類都生效,因為@configuration會自動注冊到Spring中,導致feign默認使用該配置。
局部配置:
public class ManagerFeignConfig {
@Bean
public RequestInterceptor managerFeignInterceptor() {
return new ManagerFeignInterceptor();
}
}
@FeignClient(value = StandardServiceAPI.SERVICE_NAME,
url = "${spring.gateway.host}:${spring.gateway.port}",
configuration = ManagerFeignConfig.class)
public interface StandardServiceClient {
@PutMapping(StandardServiceAPI.STANDARD_PROCESS_APPLY_STATUS)
ResultData<Void> updateProcessRequestStatus(
@Valid @RequestBody
UpdateProcessRequestStatusDto updateProcessRequestStatusDto);
}
注意:
ManagerFeignConfig
類不要加任何Spring注解,防止注入到Spring中,導致所有FeignClient都生效。- FeignClient會自動將
ManagerFeignConfig
類注入到Spring容器並且只應用到具體的FeignClient類中,因此,也可以在ManagerFeignConfig
中使用@Value注解。