From b76d500bca5ac2a2dadbe41250928daf9e7cea6f Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 1 Aug 2022 17:08:06 +0100 Subject: [PATCH] Extract consul client builder to distinct bean (#790) * extract consul client builder to distinct bean rather than static instantiation to allow injection of custom clients * use supplier to allow new builder to be instantiated every call * rename variable * re-order imports to resolve checkstyle issues * fix compilation issues --- .../ConsulConfigDataLocationResolver.java | 3 ++- .../cloud/consul/ConsulAutoConfiguration.java | 25 +++++++++++++++---- .../ConsulConfigServerBootstrapper.java | 3 ++- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigDataLocationResolver.java b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigDataLocationResolver.java index 1ebf3edc..0a0621e9 100644 --- a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigDataLocationResolver.java +++ b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigDataLocationResolver.java @@ -184,7 +184,8 @@ public class ConsulConfigDataLocationResolver implements ConfigDataLocationResol protected ConsulClient createConsulClient(BootstrapContext context) { ConsulProperties properties = context.get(ConsulProperties.class); - return ConsulAutoConfiguration.createConsulClient(properties); + return ConsulAutoConfiguration.createConsulClient(properties, + ConsulAutoConfiguration.createConsulRawClientBuilder()); } protected ConsulProperties loadProperties(ConfigDataLocationResolverContext resolverContext, diff --git a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java index fa983841..3717cbc7 100644 --- a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java +++ b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java @@ -16,9 +16,12 @@ package org.springframework.cloud.consul; +import java.util.function.Supplier; + import com.ecwid.consul.transport.TLSConfig; import com.ecwid.consul.v1.ConsulClient; import com.ecwid.consul.v1.ConsulRawClient; +import com.ecwid.consul.v1.ConsulRawClient.Builder; import org.aspectj.lang.annotation.Aspect; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; @@ -54,16 +57,28 @@ public class ConsulAutoConfiguration { @Bean @ConditionalOnMissingBean - public ConsulClient consulClient(ConsulProperties consulProperties) { - return createConsulClient(consulProperties); + public Supplier consulRawClientBuilderSupplier() { + return createConsulRawClientBuilder(); } - public static ConsulClient createConsulClient(ConsulProperties consulProperties) { + @Bean + @ConditionalOnMissingBean + public ConsulClient consulClient(ConsulProperties consulProperties, + Supplier consulRawClientBuilderSupplier) { + return createConsulClient(consulProperties, consulRawClientBuilderSupplier); + } + + public static Supplier createConsulRawClientBuilder() { + return Builder::builder; + } + + public static ConsulClient createConsulClient(ConsulProperties consulProperties, + Supplier consulRawClientBuilderSupplier) { + ConsulRawClient.Builder builder = consulRawClientBuilderSupplier.get(); final String agentPath = consulProperties.getPath(); final String agentHost = StringUtils.hasLength(consulProperties.getScheme()) ? consulProperties.getScheme() + "://" + consulProperties.getHost() : consulProperties.getHost(); - final ConsulRawClient.Builder builder = ConsulRawClient.Builder.builder().setHost(agentHost) - .setPort(consulProperties.getPort()); + builder.setHost(agentHost).setPort(consulProperties.getPort()); if (consulProperties.getTls() != null) { ConsulProperties.TLSConfig tls = consulProperties.getTls(); diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/configclient/ConsulConfigServerBootstrapper.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/configclient/ConsulConfigServerBootstrapper.java index 30a35d5d..e93717b6 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/configclient/ConsulConfigServerBootstrapper.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/configclient/ConsulConfigServerBootstrapper.java @@ -59,7 +59,8 @@ public class ConsulConfigServerBootstrapper implements BootstrapRegistryInitiali return null; } ConsulProperties consulProperties = context.get(ConsulProperties.class); - return ConsulAutoConfiguration.createConsulClient(consulProperties); + return ConsulAutoConfiguration.createConsulClient(consulProperties, + ConsulAutoConfiguration.createConsulRawClientBuilder()); }); registry.registerIfAbsent(ConsulDiscoveryClient.class, context -> { Binder binder = context.get(Binder.class);