From 394b70b771cbc4ce50874de17be68f4827059fb0 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 21 Apr 2020 16:02:00 +0200 Subject: [PATCH 1/2] Add custom lb config API utility classes. Use custom methods in existing config. --- .../LoadBalancerClientConfiguration.java | 33 +++------- .../annotation/configutil/LoadBalancers.java | 53 ++++++++++++++++ .../ServiceInstanceListSuppliers.java | 60 +++++++++++++++++++ 3 files changed, 121 insertions(+), 25 deletions(-) create mode 100644 spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/LoadBalancers.java create mode 100644 spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/ServiceInstanceListSuppliers.java diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java index 7c6f42828..4fe5756e4 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java @@ -25,13 +25,11 @@ import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient; +import org.springframework.cloud.loadbalancer.annotation.configutil.LoadBalancers; import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager; -import org.springframework.cloud.loadbalancer.core.CachingServiceInstanceListSupplier; import org.springframework.cloud.loadbalancer.core.CachingServiceInstanceSupplier; -import org.springframework.cloud.loadbalancer.core.DiscoveryClientServiceInstanceListSupplier; import org.springframework.cloud.loadbalancer.core.DiscoveryClientServiceInstanceSupplier; import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer; -import org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer; import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; import org.springframework.cloud.loadbalancer.core.ServiceInstanceSupplier; import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; @@ -41,6 +39,9 @@ import org.springframework.core.annotation.Order; import org.springframework.core.env.Environment; +import static org.springframework.cloud.loadbalancer.annotation.configutil.ServiceInstanceListSuppliers.cachedOrDelegate; +import static org.springframework.cloud.loadbalancer.annotation.configutil.ServiceInstanceListSuppliers.discoveryClientBased; + /** * @author Spencer Gibb * @author Olga Maciaszek-Sharma @@ -57,9 +58,7 @@ public class LoadBalancerClientConfiguration { public ReactorLoadBalancer reactorServiceInstanceLoadBalancer( Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) { - String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); - return new RoundRobinLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, - ServiceInstanceListSupplier.class), name); + return LoadBalancers.roundRobin(loadBalancerClientFactory, environment); } @Configuration(proxyBeanMethods = false) @@ -67,21 +66,14 @@ public ReactorLoadBalancer reactorServiceInstanceLoadBalancer( @Order(REACTIVE_SERVICE_INSTANCE_SUPPLIER_ORDER) public static class ReactiveSupportConfiguration { + @Bean @ConditionalOnBean(ReactiveDiscoveryClient.class) @ConditionalOnMissingBean public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier( ReactiveDiscoveryClient discoveryClient, Environment env, ApplicationContext context) { - DiscoveryClientServiceInstanceListSupplier delegate = new DiscoveryClientServiceInstanceListSupplier( - discoveryClient, env); - ObjectProvider cacheManagerProvider = context - .getBeanProvider(LoadBalancerCacheManager.class); - if (cacheManagerProvider.getIfAvailable() != null) { - return new CachingServiceInstanceListSupplier(delegate, - cacheManagerProvider.getIfAvailable()); - } - return delegate; + return cachedOrDelegate(context, discoveryClientBased(discoveryClient, env)); } @Bean @@ -100,7 +92,6 @@ public ServiceInstanceSupplier discoveryClientServiceInstanceSupplier( } return delegate; } - } @Configuration(proxyBeanMethods = false) @@ -114,15 +105,7 @@ public static class BlockingSupportConfiguration { public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier( DiscoveryClient discoveryClient, Environment env, ApplicationContext context) { - DiscoveryClientServiceInstanceListSupplier delegate = new DiscoveryClientServiceInstanceListSupplier( - discoveryClient, env); - ObjectProvider cacheManagerProvider = context - .getBeanProvider(LoadBalancerCacheManager.class); - if (cacheManagerProvider.getIfAvailable() != null) { - return new CachingServiceInstanceListSupplier(delegate, - cacheManagerProvider.getIfAvailable()); - } - return delegate; + return cachedOrDelegate(context, discoveryClientBased(discoveryClient, env)); } @Bean diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/LoadBalancers.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/LoadBalancers.java new file mode 100644 index 000000000..66dcb817f --- /dev/null +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/LoadBalancers.java @@ -0,0 +1,53 @@ +package org.springframework.cloud.loadbalancer.annotation.configutil; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer; +import org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; +import org.springframework.core.env.Environment; + +/** + * Utility class containing helper methods for setting up {@link ReactorLoadBalancer} configuration + * in a more concise way. + * + * @author Olga Maciaszek-Sharma + * @since 2.2.3 + */ +public class LoadBalancers { + + private LoadBalancers() { + throw new IllegalStateException("Can't instantiate a utility class"); + } + + public static ReactorLoadBalancer roundRobin(ObjectProvider serviceInstanceListSupplierProvider, + String serviceId) { + return new RoundRobinLoadBalancer(serviceInstanceListSupplierProvider, serviceId); + } + + public static ReactorLoadBalancer roundRobin(ObjectProvider serviceInstanceListSupplierProvider, + Environment environment) { + return new RoundRobinLoadBalancer(serviceInstanceListSupplierProvider, + environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME)); + } + + public static ReactorLoadBalancer roundRobin(LoadBalancerClientFactory loadBalancerClientFactory, + String serviceId) { + return roundRobin(serviceInstanceListSupplierProvider(loadBalancerClientFactory, serviceId), serviceId); + } + + public static ReactorLoadBalancer roundRobin(LoadBalancerClientFactory loadBalancerClientFactory, + Environment environment) { + String serviceId = environment + .getProperty(LoadBalancerClientFactory.PROPERTY_NAME); + return new RoundRobinLoadBalancer(serviceInstanceListSupplierProvider(loadBalancerClientFactory, serviceId), + serviceId); + } + + private static ObjectProvider serviceInstanceListSupplierProvider(LoadBalancerClientFactory loadBalancerClientFactory, String serviceId) { + return loadBalancerClientFactory + .getLazyProvider(serviceId, ServiceInstanceListSupplier.class); + } + +} diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/ServiceInstanceListSuppliers.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/ServiceInstanceListSuppliers.java new file mode 100644 index 000000000..d655157af --- /dev/null +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/ServiceInstanceListSuppliers.java @@ -0,0 +1,60 @@ +package org.springframework.cloud.loadbalancer.annotation.configutil; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient; +import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager; +import org.springframework.cloud.loadbalancer.config.LoadBalancerZoneConfig; +import org.springframework.cloud.loadbalancer.core.CachingServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.core.DiscoveryClientServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.core.HealthCheckServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; +import org.springframework.cloud.loadbalancer.core.ZonePreferenceServiceInstanceListSupplier; +import org.springframework.context.ApplicationContext; +import org.springframework.core.env.Environment; +import org.springframework.web.reactive.function.client.WebClient; + +/** + * Utility class containing helper methods for setting up {@link ServiceInstanceListSupplier} configuration + * in a more concise way. + * + * @author Olga Maciaszek-Sharma + * @since 2.2.3 + */ +public class ServiceInstanceListSuppliers { + + public static ServiceInstanceListSupplier cachedOrDelegate(ObjectProvider cacheManagerProvider, + ServiceInstanceListSupplier delegate) { + if (cacheManagerProvider.getIfAvailable() != null) { + return new CachingServiceInstanceListSupplier(delegate, + cacheManagerProvider.getIfAvailable()); + } + return delegate; + } + + public static ServiceInstanceListSupplier cachedOrDelegate(ApplicationContext context, + ServiceInstanceListSupplier delegate) { + return cachedOrDelegate(context.getBeanProvider(LoadBalancerCacheManager.class), + delegate); + } + + public static ServiceInstanceListSupplier discoveryClientBased(ReactiveDiscoveryClient discoveryClient, + Environment environment) { + return new DiscoveryClientServiceInstanceListSupplier(discoveryClient, environment); + } + + public static ServiceInstanceListSupplier discoveryClientBased(DiscoveryClient discoveryClient, + Environment environment) { + return new DiscoveryClientServiceInstanceListSupplier(discoveryClient, environment); + } + + public static ServiceInstanceListSupplier zonePreferenceBased(ServiceInstanceListSupplier delegate, + LoadBalancerZoneConfig zoneConfig) { + return new ZonePreferenceServiceInstanceListSupplier(delegate, zoneConfig); + } + + public static ServiceInstanceListSupplier healthCheckBased(ServiceInstanceListSupplier delegate, + LoadBalancerProperties.HealthCheck healthCheck, WebClient webClient) { + return new HealthCheckServiceInstanceListSupplier(delegate, healthCheck, webClient); + } +} From e57e963187ba49b4353793164160fba6a8ec2f6c Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 21 Apr 2020 16:25:36 +0200 Subject: [PATCH 2/2] Add docs. Fix checkstyle. --- docs/src/main/asciidoc/_configprops.adoc | 1 + .../main/asciidoc/spring-cloud-commons.adoc | 44 ++++----------- .../LoadBalancerClientConfiguration.java | 2 +- .../annotation/configutil/LoadBalancers.java | 49 ++++++++++++----- .../ServiceInstanceListSuppliers.java | 55 ++++++++++++++----- 5 files changed, 91 insertions(+), 60 deletions(-) diff --git a/docs/src/main/asciidoc/_configprops.adoc b/docs/src/main/asciidoc/_configprops.adoc index 9c3d46bb0..ec8035695 100644 --- a/docs/src/main/asciidoc/_configprops.adoc +++ b/docs/src/main/asciidoc/_configprops.adoc @@ -37,6 +37,7 @@ |spring.cloud.loadbalancer.ribbon.enabled | true | Causes `RibbonLoadBalancerClient` to be used by default. |spring.cloud.refresh.enabled | true | Enables autoconfiguration for the refresh scope and associated features. |spring.cloud.refresh.extra-refreshable | true | Additional class names for beans to post process into refresh scope. +|spring.cloud.refresh.never-refreshable | true | Comma separated list of class names for beans to never be refreshed or rebound. |spring.cloud.service-registry.auto-registration.enabled | true | Whether service auto-registration is enabled. Defaults to true. |spring.cloud.service-registry.auto-registration.fail-fast | false | Whether startup fails if there is no AutoServiceRegistration. Defaults to false. |spring.cloud.service-registry.auto-registration.register-management | true | Whether to register the management as a service. Defaults to true. diff --git a/docs/src/main/asciidoc/spring-cloud-commons.adoc b/docs/src/main/asciidoc/spring-cloud-commons.adoc index 6a1222237..4922f6b5f 100644 --- a/docs/src/main/asciidoc/spring-cloud-commons.adoc +++ b/docs/src/main/asciidoc/spring-cloud-commons.adoc @@ -916,22 +916,12 @@ You could use this sample configuration to set it up: public class CustomLoadBalancerConfiguration { @Bean - public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier( - ReactiveDiscoveryClient discoveryClient, Environment environment, - LoadBalancerZoneConfig zoneConfig, - ApplicationContext context) { - DiscoveryClientServiceInstanceListSupplier firstDelegate = new DiscoveryClientServiceInstanceListSupplier( - discoveryClient, environment); - ZonePreferenceServiceInstanceListSupplier delegate = new ZonePreferenceServiceInstanceListSupplier(firstDelegate, - zoneConfig); - ObjectProvider cacheManagerProvider = context - .getBeanProvider(LoadBalancerCacheManager.class); - if (cacheManagerProvider.getIfAvailable() != null) { - return new CachingServiceInstanceListSupplier(delegate, - cacheManagerProvider.getIfAvailable()); + public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier( + ReactiveDiscoveryClient discoveryClient, Environment environment, + LoadBalancerZoneConfig zoneConfig, + ApplicationContext context) { + return cachedOrDelegate(context, zonedWithDelegate(discoveryClientBased (discoveryClient, environment), zoneConfig)); } - return delegate; - } } ---- @@ -974,24 +964,12 @@ You could use this sample configuration to set it up: public class CustomLoadBalancerConfiguration { @Bean - public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier( - ReactiveDiscoveryClient discoveryClient, Environment environment, - LoadBalancerProperties loadBalancerProperties, - ApplicationContext context, - InstanceHealthChecker healthChecker) { - DiscoveryClientServiceInstanceListSupplier firstDelegate = new DiscoveryClientServiceInstanceListSupplier( - discoveryClient, environment); - HealthCheckServiceInstanceListSupplier delegate = new HealthCheckServiceInstanceListSupplier(firstDelegate, - loadBalancerProperties, healthChecker); - ObjectProvider cacheManagerProvider = context - .getBeanProvider(LoadBalancerCacheManager.class); - if (cacheManagerProvider.getIfAvailable() != null) { - return new CachingServiceInstanceListSupplier(delegate, - cacheManagerProvider.getIfAvailable()); - } - return delegate; - } + public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier( + ReactiveDiscoveryClient discoveryClient, Environment environment, + ApplicationContext context, LoadBalancerProperties.HealthCheck healthCheck, WebClient webClient) { + return cachedOrDelegate(context, healthCheckBased(discoveryClientBased (discoveryClient, environment), healthCheck, webClient)); } +} ---- [[spring-cloud-loadbalancer-starter]] @@ -1050,6 +1028,8 @@ public class MyConfiguration { } } ---- + +TIP:: In order to make working on your own LoadBalancer configuration easier, we have added some utility methods in `ServiceInstanceListSuppliers` and `LoadBalancers` classes. ==== == Spring Cloud Circuit Breaker diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java index 4fe5756e4..5f62c1164 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/LoadBalancerClientConfiguration.java @@ -66,7 +66,6 @@ public ReactorLoadBalancer reactorServiceInstanceLoadBalancer( @Order(REACTIVE_SERVICE_INSTANCE_SUPPLIER_ORDER) public static class ReactiveSupportConfiguration { - @Bean @ConditionalOnBean(ReactiveDiscoveryClient.class) @ConditionalOnMissingBean @@ -92,6 +91,7 @@ public ServiceInstanceSupplier discoveryClientServiceInstanceSupplier( } return delegate; } + } @Configuration(proxyBeanMethods = false) diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/LoadBalancers.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/LoadBalancers.java index 66dcb817f..5d65515ac 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/LoadBalancers.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/LoadBalancers.java @@ -1,3 +1,19 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.springframework.cloud.loadbalancer.annotation.configutil; import org.springframework.beans.factory.ObjectProvider; @@ -9,45 +25,52 @@ import org.springframework.core.env.Environment; /** - * Utility class containing helper methods for setting up {@link ReactorLoadBalancer} configuration - * in a more concise way. + * Utility class containing helper methods for setting up {@link ReactorLoadBalancer} + * configuration in a more concise way. * * @author Olga Maciaszek-Sharma * @since 2.2.3 */ -public class LoadBalancers { +public final class LoadBalancers { private LoadBalancers() { throw new IllegalStateException("Can't instantiate a utility class"); } - public static ReactorLoadBalancer roundRobin(ObjectProvider serviceInstanceListSupplierProvider, + public static ReactorLoadBalancer roundRobin( + ObjectProvider serviceInstanceListSupplierProvider, String serviceId) { return new RoundRobinLoadBalancer(serviceInstanceListSupplierProvider, serviceId); } - public static ReactorLoadBalancer roundRobin(ObjectProvider serviceInstanceListSupplierProvider, + public static ReactorLoadBalancer roundRobin( + ObjectProvider serviceInstanceListSupplierProvider, Environment environment) { return new RoundRobinLoadBalancer(serviceInstanceListSupplierProvider, environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME)); } - public static ReactorLoadBalancer roundRobin(LoadBalancerClientFactory loadBalancerClientFactory, - String serviceId) { - return roundRobin(serviceInstanceListSupplierProvider(loadBalancerClientFactory, serviceId), serviceId); + public static ReactorLoadBalancer roundRobin( + LoadBalancerClientFactory loadBalancerClientFactory, String serviceId) { + return roundRobin( + serviceInstanceListSupplierProvider(loadBalancerClientFactory, serviceId), + serviceId); } - public static ReactorLoadBalancer roundRobin(LoadBalancerClientFactory loadBalancerClientFactory, + public static ReactorLoadBalancer roundRobin( + LoadBalancerClientFactory loadBalancerClientFactory, Environment environment) { String serviceId = environment .getProperty(LoadBalancerClientFactory.PROPERTY_NAME); - return new RoundRobinLoadBalancer(serviceInstanceListSupplierProvider(loadBalancerClientFactory, serviceId), + return new RoundRobinLoadBalancer( + serviceInstanceListSupplierProvider(loadBalancerClientFactory, serviceId), serviceId); } - private static ObjectProvider serviceInstanceListSupplierProvider(LoadBalancerClientFactory loadBalancerClientFactory, String serviceId) { - return loadBalancerClientFactory - .getLazyProvider(serviceId, ServiceInstanceListSupplier.class); + private static ObjectProvider serviceInstanceListSupplierProvider( + LoadBalancerClientFactory loadBalancerClientFactory, String serviceId) { + return loadBalancerClientFactory.getLazyProvider(serviceId, + ServiceInstanceListSupplier.class); } } diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/ServiceInstanceListSuppliers.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/ServiceInstanceListSuppliers.java index d655157af..1b19ab99e 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/ServiceInstanceListSuppliers.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/annotation/configutil/ServiceInstanceListSuppliers.java @@ -1,8 +1,25 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.springframework.cloud.loadbalancer.annotation.configutil; import org.springframework.beans.factory.ObjectProvider; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient; +import org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerProperties; import org.springframework.cloud.loadbalancer.cache.LoadBalancerCacheManager; import org.springframework.cloud.loadbalancer.config.LoadBalancerZoneConfig; import org.springframework.cloud.loadbalancer.core.CachingServiceInstanceListSupplier; @@ -15,15 +32,20 @@ import org.springframework.web.reactive.function.client.WebClient; /** - * Utility class containing helper methods for setting up {@link ServiceInstanceListSupplier} configuration - * in a more concise way. + * Utility class containing helper methods for setting up + * {@link ServiceInstanceListSupplier} configuration in a more concise way. * * @author Olga Maciaszek-Sharma * @since 2.2.3 */ -public class ServiceInstanceListSuppliers { +public final class ServiceInstanceListSuppliers { + + private ServiceInstanceListSuppliers() { + throw new IllegalStateException("Can't instantiate a utility class"); + } - public static ServiceInstanceListSupplier cachedOrDelegate(ObjectProvider cacheManagerProvider, + public static ServiceInstanceListSupplier cachedOrDelegate( + ObjectProvider cacheManagerProvider, ServiceInstanceListSupplier delegate) { if (cacheManagerProvider.getIfAvailable() != null) { return new CachingServiceInstanceListSupplier(delegate, @@ -38,23 +60,28 @@ public static ServiceInstanceListSupplier cachedOrDelegate(ApplicationContext co delegate); } - public static ServiceInstanceListSupplier discoveryClientBased(ReactiveDiscoveryClient discoveryClient, - Environment environment) { - return new DiscoveryClientServiceInstanceListSupplier(discoveryClient, environment); + public static ServiceInstanceListSupplier discoveryClientBased( + ReactiveDiscoveryClient discoveryClient, Environment environment) { + return new DiscoveryClientServiceInstanceListSupplier(discoveryClient, + environment); } - public static ServiceInstanceListSupplier discoveryClientBased(DiscoveryClient discoveryClient, - Environment environment) { - return new DiscoveryClientServiceInstanceListSupplier(discoveryClient, environment); + public static ServiceInstanceListSupplier discoveryClientBased( + DiscoveryClient discoveryClient, Environment environment) { + return new DiscoveryClientServiceInstanceListSupplier(discoveryClient, + environment); } - public static ServiceInstanceListSupplier zonePreferenceBased(ServiceInstanceListSupplier delegate, - LoadBalancerZoneConfig zoneConfig) { + public static ServiceInstanceListSupplier zonePreferenceBased( + ServiceInstanceListSupplier delegate, LoadBalancerZoneConfig zoneConfig) { return new ZonePreferenceServiceInstanceListSupplier(delegate, zoneConfig); } - public static ServiceInstanceListSupplier healthCheckBased(ServiceInstanceListSupplier delegate, + public static ServiceInstanceListSupplier healthCheckBased( + ServiceInstanceListSupplier delegate, LoadBalancerProperties.HealthCheck healthCheck, WebClient webClient) { - return new HealthCheckServiceInstanceListSupplier(delegate, healthCheck, webClient); + return new HealthCheckServiceInstanceListSupplier(delegate, healthCheck, + webClient); } + }