Я нашел решение без профилей Spring.
Основная идея этой души - использовать аннотацию @ConditionalOnProperty
, которая предотвращает создание bean-компонентов в зависимости от конкретного свойства. В этом случае
Во-первых, нам нужно создать новый интерфейс с именем, например, SomeFeignClient
public interface SomeFeignClient {
Entity getEntity(String id);
}
Во-вторых, создать 2 клиента Feign, которые расширят наш интерфейс и пометят их с помощью @ConditionalOnProperty
аннотации
@ConditionalOnProperty(prefix="feign.client", name="internal", havingValue="true")
@FeignClient(...your configurations here...)
public interface SomeFeignClientFirst extends SomeFeignClient {
@Override
Entity getEntity(String id);
}
@ConditionalOnProperty(prefix="feign.client", name="internal", havingValue="false")
@FeignClient(...your configurations here...)
public interface SomeFeignClientSecond extends SomeFeignClient {
@Override
Entity getEntity(String id);
}
Если вы хотите добавить перехватчик запросов для некоторых из этих фальшивых клиентов, не забудьте пометить их, используя @ConditionalOnBean
аннотацию
@RequiredArgsConstructor
public class FeignClientConfiguration {
private final FeignProperties properties;
@ConditionalOnBean(SomeFeignClientFirst.class)
@Bean
public RequestInterceptor requestInterceptor() {
return template -> {
template.header(HttpHeaders.AUTHORIZATION, "Token " + properties.getToken());
template.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
template.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
};
}