1. 程式人生 > 其它 >Feign全域性配置和區域性配置

Feign全域性配置和區域性配置

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
)

注意:

  1. 全域性配置的時候,就不需要在具體的FeignClient類中再配置configuration屬性了。
  2. 全域性配置會使得所有的@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);

}

注意:

  1. ManagerFeignConfig 類不要加任何Spring註解,防止注入到Spring中,導致所有FeignClient都生效。
  2. FeignClient會自動將ManagerFeignConfig 類注入到Spring容器並且只應用到具體的FeignClient類中,因此,也可以在ManagerFeignConfig中使用@Value註解。