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
This commit is contained in:
Ryan
2022-08-01 17:08:06 +01:00
committed by GitHub
parent c28b319305
commit b76d500bca
3 changed files with 24 additions and 7 deletions

View File

@@ -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,

View File

@@ -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<ConsulRawClient.Builder> consulRawClientBuilderSupplier() {
return createConsulRawClientBuilder();
}
public static ConsulClient createConsulClient(ConsulProperties consulProperties) {
@Bean
@ConditionalOnMissingBean
public ConsulClient consulClient(ConsulProperties consulProperties,
Supplier<ConsulRawClient.Builder> consulRawClientBuilderSupplier) {
return createConsulClient(consulProperties, consulRawClientBuilderSupplier);
}
public static Supplier<Builder> createConsulRawClientBuilder() {
return Builder::builder;
}
public static ConsulClient createConsulClient(ConsulProperties consulProperties,
Supplier<ConsulRawClient.Builder> 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();

View File

@@ -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);