Switch to using LB per-client properties. Add deprecation docs. (#1036)
This commit is contained in:
committed by
GitHub
parent
181e452aec
commit
68d43a177e
@@ -94,7 +94,7 @@ public class LoadBalancerClientConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnBean(XForwardedHeadersTransformer.class)
|
||||
@ConditionalOnBean({ XForwardedHeadersTransformer.class, LoadBalancerClientFactory.class })
|
||||
@ConditionalOnMissingBean
|
||||
@ConditionalOnProperty(value = "spring.cloud.loadbalancer.xForwarded.enabledXforwarded", havingValue = "true")
|
||||
public XForwardedHeadersTransformer xForwarderHeadersTransformer(LoadBalancerClientFactory clientFactory) {
|
||||
|
||||
@@ -19,7 +19,7 @@ package org.springframework.cloud.loadbalancer.blocking;
|
||||
import org.springframework.cloud.client.ServiceInstance;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerRequestTransformer;
|
||||
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
|
||||
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpRequest;
|
||||
|
||||
@@ -33,9 +33,9 @@ import org.springframework.http.HttpRequest;
|
||||
|
||||
public class XForwardedHeadersTransformer implements LoadBalancerRequestTransformer {
|
||||
|
||||
private final LoadBalancerClientFactory factory;
|
||||
private final ReactiveLoadBalancer.Factory<ServiceInstance> factory;
|
||||
|
||||
public XForwardedHeadersTransformer(LoadBalancerClientFactory factory) {
|
||||
public XForwardedHeadersTransformer(ReactiveLoadBalancer.Factory<ServiceInstance> factory) {
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
|
||||
@@ -54,15 +54,20 @@ import static org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoa
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public class BlockingLoadBalancerClient implements LoadBalancerClient {
|
||||
|
||||
private final LoadBalancerClientFactory loadBalancerClientFactory;
|
||||
|
||||
private final LoadBalancerProperties properties;
|
||||
private final ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory;
|
||||
|
||||
/**
|
||||
* @deprecated in favour of
|
||||
* {@link BlockingLoadBalancerClient#BlockingLoadBalancerClient(ReactiveLoadBalancer.Factory)}
|
||||
*/
|
||||
@Deprecated
|
||||
public BlockingLoadBalancerClient(LoadBalancerClientFactory loadBalancerClientFactory,
|
||||
LoadBalancerProperties properties) {
|
||||
this.loadBalancerClientFactory = loadBalancerClientFactory;
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
public BlockingLoadBalancerClient(ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory) {
|
||||
this.loadBalancerClientFactory = loadBalancerClientFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -155,6 +160,7 @@ public class BlockingLoadBalancerClient implements LoadBalancerClient {
|
||||
}
|
||||
|
||||
private String getHint(String serviceId) {
|
||||
LoadBalancerProperties properties = loadBalancerClientFactory.getProperties(serviceId);
|
||||
String defaultHint = properties.getHint().getOrDefault("default", "default");
|
||||
String hintPropertyValue = properties.getHint().get(serviceId);
|
||||
return hintPropertyValue != null ? hintPropertyValue : defaultHint;
|
||||
|
||||
@@ -59,9 +59,8 @@ public class BlockingLoadBalancerClientAutoConfiguration {
|
||||
@Bean
|
||||
@ConditionalOnBean(LoadBalancerClientFactory.class)
|
||||
@ConditionalOnMissingBean
|
||||
public LoadBalancerClient blockingLoadBalancerClient(LoadBalancerClientFactory loadBalancerClientFactory,
|
||||
LoadBalancerProperties properties) {
|
||||
return new BlockingLoadBalancerClient(loadBalancerClientFactory, properties);
|
||||
public LoadBalancerClient blockingLoadBalancerClient(LoadBalancerClientFactory loadBalancerClientFactory) {
|
||||
return new BlockingLoadBalancerClient(loadBalancerClientFactory);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -76,6 +75,7 @@ public class BlockingLoadBalancerClientAutoConfiguration {
|
||||
@Bean
|
||||
@ConditionalOnProperty(value = "spring.cloud.loadbalancer.xforwarded.enabledXforwarded", havingValue = "true")
|
||||
@ConditionalOnMissingBean(XForwardedHeadersTransformer.class)
|
||||
@ConditionalOnBean(LoadBalancerClientFactory.class)
|
||||
public XForwardedHeadersTransformer xForwarderHeadersTransformer(
|
||||
LoadBalancerClientFactory loadBalancerClientFactory) {
|
||||
return new XForwardedHeadersTransformer(loadBalancerClientFactory);
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.springframework.beans.factory.DisposableBean;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.cloud.client.ServiceInstance;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
|
||||
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
@@ -59,6 +60,11 @@ public class HealthCheckServiceInstanceListSupplier extends DelegatingServiceIns
|
||||
|
||||
private final BiFunction<ServiceInstance, String, Mono<Boolean>> aliveFunction;
|
||||
|
||||
/**
|
||||
* @deprecated in favour of
|
||||
* {@link HealthCheckServiceInstanceListSupplier#HealthCheckServiceInstanceListSupplier(ServiceInstanceListSupplier, ReactiveLoadBalancer.Factory, BiFunction)}
|
||||
*/
|
||||
@Deprecated
|
||||
public HealthCheckServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
|
||||
LoadBalancerProperties.HealthCheck healthCheck,
|
||||
BiFunction<ServiceInstance, String, Mono<Boolean>> aliveFunction) {
|
||||
@@ -76,6 +82,23 @@ public class HealthCheckServiceInstanceListSupplier extends DelegatingServiceIns
|
||||
.refCount(1);
|
||||
}
|
||||
|
||||
public HealthCheckServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
|
||||
ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory,
|
||||
BiFunction<ServiceInstance, String, Mono<Boolean>> aliveFunction) {
|
||||
super(delegate);
|
||||
this.healthCheck = loadBalancerClientFactory.getProperties(getServiceId()).getHealthCheck();
|
||||
defaultHealthCheckPath = healthCheck.getPath().getOrDefault("default", "/actuator/health");
|
||||
this.aliveFunction = aliveFunction;
|
||||
Repeat<Object> aliveInstancesReplayRepeat = Repeat
|
||||
.onlyIf(repeatContext -> this.healthCheck.getRefetchInstances())
|
||||
.fixedBackoff(healthCheck.getRefetchInstancesInterval());
|
||||
Flux<List<ServiceInstance>> aliveInstancesFlux = Flux.defer(delegate).repeatWhen(aliveInstancesReplayRepeat)
|
||||
.switchMap(serviceInstances -> healthCheckFlux(serviceInstances)
|
||||
.map(alive -> Collections.unmodifiableList(new ArrayList<>(alive))));
|
||||
aliveInstancesReplay = aliveInstancesFlux.delaySubscription(healthCheck.getInitialDelay()).replay(1)
|
||||
.refCount(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() {
|
||||
Disposable healthCheckDisposable = this.healthCheckDisposable;
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.springframework.cloud.client.loadbalancer.HintRequestContext;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
|
||||
import org.springframework.cloud.client.loadbalancer.Request;
|
||||
import org.springframework.cloud.client.loadbalancer.RequestDataContext;
|
||||
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
@@ -40,12 +41,23 @@ public class HintBasedServiceInstanceListSupplier extends DelegatingServiceInsta
|
||||
|
||||
private final LoadBalancerProperties properties;
|
||||
|
||||
/**
|
||||
* @deprecated in favour of
|
||||
* {@link HintBasedServiceInstanceListSupplier#HintBasedServiceInstanceListSupplier(ServiceInstanceListSupplier, ReactiveLoadBalancer.Factory)}
|
||||
*/
|
||||
@Deprecated
|
||||
public HintBasedServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
|
||||
LoadBalancerProperties properties) {
|
||||
super(delegate);
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
public HintBasedServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
|
||||
ReactiveLoadBalancer.Factory<ServiceInstance> factory) {
|
||||
super(delegate);
|
||||
this.properties = factory.getProperties(getServiceId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<List<ServiceInstance>> get() {
|
||||
return delegate.get();
|
||||
|
||||
@@ -23,6 +23,7 @@ import org.springframework.cloud.client.ServiceInstance;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerRequestTransformer;
|
||||
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
|
||||
import org.springframework.http.HttpCookie;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpRequest;
|
||||
@@ -37,18 +38,26 @@ import org.springframework.util.StringUtils;
|
||||
*/
|
||||
public class LoadBalancerServiceInstanceCookieTransformer implements LoadBalancerRequestTransformer {
|
||||
|
||||
private final LoadBalancerProperties.StickySession stickySessionProperties;
|
||||
private ReactiveLoadBalancer.Factory<ServiceInstance> factory;
|
||||
|
||||
private LoadBalancerProperties.StickySession stickySessionProperties;
|
||||
|
||||
public LoadBalancerServiceInstanceCookieTransformer(LoadBalancerProperties.StickySession stickySessionProperties) {
|
||||
this.stickySessionProperties = stickySessionProperties;
|
||||
}
|
||||
|
||||
public LoadBalancerServiceInstanceCookieTransformer(ReactiveLoadBalancer.Factory<ServiceInstance> factory) {
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpRequest transformRequest(HttpRequest request, ServiceInstance instance) {
|
||||
if (instance == null) {
|
||||
return request;
|
||||
}
|
||||
String instanceIdCookieName = stickySessionProperties.getInstanceIdCookieName();
|
||||
LoadBalancerProperties.StickySession stickySession = factory != null
|
||||
? factory.getProperties(instance.getServiceId()).getStickySession() : stickySessionProperties;
|
||||
String instanceIdCookieName = stickySession.getInstanceIdCookieName();
|
||||
if (!StringUtils.hasText(instanceIdCookieName)) {
|
||||
return request;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.springframework.cloud.client.ServiceInstance;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
|
||||
import org.springframework.cloud.client.loadbalancer.Request;
|
||||
import org.springframework.cloud.client.loadbalancer.RequestDataContext;
|
||||
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
/**
|
||||
@@ -42,12 +43,23 @@ public class RequestBasedStickySessionServiceInstanceListSupplier extends Delega
|
||||
|
||||
private final LoadBalancerProperties properties;
|
||||
|
||||
/**
|
||||
* @deprecated in favour of
|
||||
* {@link RequestBasedStickySessionServiceInstanceListSupplier#RequestBasedStickySessionServiceInstanceListSupplier(ServiceInstanceListSupplier, ReactiveLoadBalancer.Factory)}
|
||||
*/
|
||||
@Deprecated
|
||||
public RequestBasedStickySessionServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
|
||||
LoadBalancerProperties properties) {
|
||||
super(delegate);
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
public RequestBasedStickySessionServiceInstanceListSupplier(ServiceInstanceListSupplier delegate,
|
||||
ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory) {
|
||||
super(delegate);
|
||||
this.properties = loadBalancerClientFactory.getProperties(getServiceId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<List<ServiceInstance>> get() {
|
||||
return delegate.get();
|
||||
|
||||
@@ -30,9 +30,10 @@ import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.cloud.client.ServiceInstance;
|
||||
import org.springframework.cloud.client.discovery.DiscoveryClient;
|
||||
import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
|
||||
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
|
||||
import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager;
|
||||
import org.springframework.cloud.loadbalancer.config.LoadBalancerZoneConfig;
|
||||
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.util.Assert;
|
||||
@@ -117,9 +118,10 @@ public final class ServiceInstanceListSupplierBuilder {
|
||||
*/
|
||||
public ServiceInstanceListSupplierBuilder withHealthChecks() {
|
||||
DelegateCreator creator = (context, delegate) -> {
|
||||
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
|
||||
ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory = context
|
||||
.getBean(LoadBalancerClientFactory.class);
|
||||
WebClient.Builder webClient = context.getBean(WebClient.Builder.class);
|
||||
return healthCheckServiceInstanceListSupplier(webClient.build(), delegate, properties);
|
||||
return healthCheckServiceInstanceListSupplier(webClient.build(), delegate, loadBalancerClientFactory);
|
||||
};
|
||||
this.creators.add(creator);
|
||||
return this;
|
||||
@@ -133,8 +135,8 @@ public final class ServiceInstanceListSupplierBuilder {
|
||||
*/
|
||||
public ServiceInstanceListSupplierBuilder withHealthChecks(WebClient webClient) {
|
||||
DelegateCreator creator = (context, delegate) -> {
|
||||
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
|
||||
return healthCheckServiceInstanceListSupplier(webClient, delegate, properties);
|
||||
LoadBalancerClientFactory loadBalancerClientFactory = context.getBean(LoadBalancerClientFactory.class);
|
||||
return healthCheckServiceInstanceListSupplier(webClient, delegate, loadBalancerClientFactory);
|
||||
};
|
||||
this.creators.add(creator);
|
||||
return this;
|
||||
@@ -160,8 +162,8 @@ public final class ServiceInstanceListSupplierBuilder {
|
||||
public ServiceInstanceListSupplierBuilder withBlockingHealthChecks() {
|
||||
DelegateCreator creator = (context, delegate) -> {
|
||||
RestTemplate restTemplate = context.getBean(RestTemplate.class);
|
||||
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
|
||||
return blockingHealthCheckServiceInstanceListSupplier(restTemplate, delegate, properties);
|
||||
LoadBalancerClientFactory loadBalancerClientFactory = context.getBean(LoadBalancerClientFactory.class);
|
||||
return blockingHealthCheckServiceInstanceListSupplier(restTemplate, delegate, loadBalancerClientFactory);
|
||||
};
|
||||
this.creators.add(creator);
|
||||
return this;
|
||||
@@ -175,8 +177,8 @@ public final class ServiceInstanceListSupplierBuilder {
|
||||
*/
|
||||
public ServiceInstanceListSupplierBuilder withBlockingHealthChecks(RestTemplate restTemplate) {
|
||||
DelegateCreator creator = (context, delegate) -> {
|
||||
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
|
||||
return blockingHealthCheckServiceInstanceListSupplier(restTemplate, delegate, properties);
|
||||
LoadBalancerClientFactory loadBalancerClientFactory = context.getBean(LoadBalancerClientFactory.class);
|
||||
return blockingHealthCheckServiceInstanceListSupplier(restTemplate, delegate, loadBalancerClientFactory);
|
||||
};
|
||||
this.creators.add(creator);
|
||||
return this;
|
||||
@@ -203,8 +205,8 @@ public final class ServiceInstanceListSupplierBuilder {
|
||||
*/
|
||||
public ServiceInstanceListSupplierBuilder withRequestBasedStickySession() {
|
||||
DelegateCreator creator = (context, delegate) -> {
|
||||
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
|
||||
return new RequestBasedStickySessionServiceInstanceListSupplier(delegate, properties);
|
||||
LoadBalancerClientFactory loadBalancerClientFactory = context.getBean(LoadBalancerClientFactory.class);
|
||||
return new RequestBasedStickySessionServiceInstanceListSupplier(delegate, loadBalancerClientFactory);
|
||||
};
|
||||
this.creators.add(creator);
|
||||
return this;
|
||||
@@ -245,8 +247,8 @@ public final class ServiceInstanceListSupplierBuilder {
|
||||
|
||||
public ServiceInstanceListSupplierBuilder withHints() {
|
||||
DelegateCreator creator = (context, delegate) -> {
|
||||
LoadBalancerProperties properties = context.getBean(LoadBalancerProperties.class);
|
||||
return new HintBasedServiceInstanceListSupplier(delegate, properties);
|
||||
LoadBalancerClientFactory factory = context.getBean(LoadBalancerClientFactory.class);
|
||||
return new HintBasedServiceInstanceListSupplier(delegate, factory);
|
||||
};
|
||||
creators.add(creator);
|
||||
return this;
|
||||
@@ -287,8 +289,9 @@ public final class ServiceInstanceListSupplierBuilder {
|
||||
}
|
||||
|
||||
private ServiceInstanceListSupplier healthCheckServiceInstanceListSupplier(WebClient webClient,
|
||||
ServiceInstanceListSupplier delegate, LoadBalancerProperties properties) {
|
||||
return new HealthCheckServiceInstanceListSupplier(delegate, properties.getHealthCheck(),
|
||||
ServiceInstanceListSupplier delegate,
|
||||
ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory) {
|
||||
return new HealthCheckServiceInstanceListSupplier(delegate, loadBalancerClientFactory,
|
||||
(serviceInstance, healthCheckPath) -> webClient.get()
|
||||
.uri(UriComponentsBuilder.fromUriString(getUri(serviceInstance, healthCheckPath)).build()
|
||||
.toUri())
|
||||
@@ -297,8 +300,9 @@ public final class ServiceInstanceListSupplierBuilder {
|
||||
}
|
||||
|
||||
private ServiceInstanceListSupplier blockingHealthCheckServiceInstanceListSupplier(RestTemplate restTemplate,
|
||||
ServiceInstanceListSupplier delegate, LoadBalancerProperties properties) {
|
||||
return new HealthCheckServiceInstanceListSupplier(delegate, properties.getHealthCheck(),
|
||||
ServiceInstanceListSupplier delegate,
|
||||
ReactiveLoadBalancer.Factory<ServiceInstance> loadBalancerClientFactory) {
|
||||
return new HealthCheckServiceInstanceListSupplier(delegate, loadBalancerClientFactory,
|
||||
(serviceInstance, healthCheckPath) -> Mono.defer(() -> {
|
||||
URI uri = UriComponentsBuilder.fromUriString(getUri(serviceInstance, healthCheckPath)).build()
|
||||
.toUri();
|
||||
|
||||
@@ -19,7 +19,7 @@ package org.springframework.cloud.loadbalancer.core;
|
||||
import org.springframework.cloud.client.ServiceInstance;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
|
||||
import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerClientRequestTransformer;
|
||||
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
|
||||
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.web.reactive.function.client.ClientRequest;
|
||||
|
||||
@@ -33,9 +33,9 @@ import org.springframework.web.reactive.function.client.ClientRequest;
|
||||
|
||||
public class XForwardedHeadersTransformer implements LoadBalancerClientRequestTransformer {
|
||||
|
||||
private final LoadBalancerClientFactory clientFactory;
|
||||
private final ReactiveLoadBalancer.Factory<ServiceInstance> clientFactory;
|
||||
|
||||
public XForwardedHeadersTransformer(LoadBalancerClientFactory clientFactory) {
|
||||
public XForwardedHeadersTransformer(ReactiveLoadBalancer.Factory<ServiceInstance> clientFactory) {
|
||||
this.clientFactory = clientFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,6 +55,10 @@ public class LoadBalancerClientFactory extends NamedContextFactory<LoadBalancerC
|
||||
|
||||
private final LoadBalancerClientsProperties properties;
|
||||
|
||||
/**
|
||||
* @deprecated in favour of
|
||||
* {@link LoadBalancerClientFactory#LoadBalancerClientFactory(LoadBalancerClientsProperties)}
|
||||
*/
|
||||
@Deprecated
|
||||
public LoadBalancerClientFactory() {
|
||||
this(null);
|
||||
|
||||
@@ -20,8 +20,9 @@ import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties;
|
||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerClientsProperties;
|
||||
import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager;
|
||||
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.web.reactive.function.client.WebClient;
|
||||
@@ -89,8 +90,8 @@ public class ServiceInstanceListSupplierBuilderTests {
|
||||
}
|
||||
|
||||
@Bean
|
||||
public LoadBalancerProperties loadBalancerProperties() {
|
||||
return new LoadBalancerProperties();
|
||||
public LoadBalancerClientFactory loadBalancerClientFactory() {
|
||||
return new LoadBalancerClientFactory(new LoadBalancerClientsProperties());
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
||||
Reference in New Issue
Block a user