Feign全域性配置和區域性配置
阿新 • • 發佈:2021-10-02
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註解。