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 a8b597cb..212e3069 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 @@ -60,7 +60,7 @@ public class ConsulConfigDataLocationResolver public List resolveProfileSpecific( ConfigDataLocationResolverContext context, String location, boolean optional, Profiles profiles) throws ConfigDataLocationNotFoundException { - //TODO: add support for consul host and port from location + ConsulConfigProperties properties = loadConfigProperties(context.getBinder()); String appName = properties.getName(); @@ -103,7 +103,7 @@ public class ConsulConfigDataLocationResolver Collections.reverse(contexts); // TODO use location for host:port - ConsulClient consul = createConsulClient(context); + ConsulClient consul = createConsulClient(context, location); registerBean(context, ConsulClient.class, consul); @@ -127,9 +127,19 @@ public class ConsulConfigDataLocationResolver "configData" + type.getSimpleName(), consulClient)); } - protected ConsulClient createConsulClient(ConfigDataLocationResolverContext context) { - return ConsulAutoConfiguration - .createConsulClient(loadProperties(context.getBinder())); + protected ConsulClient createConsulClient(ConfigDataLocationResolverContext context, String location) { + ConsulProperties properties = loadProperties(context.getBinder()); + + String hostPort = location.substring("consul:".length()); + if (StringUtils.hasText(hostPort)) { + String[] split = hostPort.split(":"); + if (split.length == 2) { // host and port + properties.setHost(split[0]); + properties.setPort(Integer.parseInt(split[1])); + } + } + + return ConsulAutoConfiguration.createConsulClient(properties); } protected String getContext(String prefix, String context) { diff --git a/spring-cloud-consul-config/src/test/java/org/springframework/cloud/consul/config/ConsulConfigDataIntegrationTests.java b/spring-cloud-consul-config/src/test/java/org/springframework/cloud/consul/config/ConsulConfigDataIntegrationTests.java index 541d31dc..1a428613 100644 --- a/spring-cloud-consul-config/src/test/java/org/springframework/cloud/consul/config/ConsulConfigDataIntegrationTests.java +++ b/spring-cloud-consul-config/src/test/java/org/springframework/cloud/consul/config/ConsulConfigDataIntegrationTests.java @@ -89,9 +89,8 @@ public class ConsulConfigDataIntegrationTests { context = new SpringApplicationBuilder(Config.class).web(WebApplicationType.NONE) .run("--spring.application.name=" + APP_NAME, - "--spring.config.import=consul:", "--debug", - "--spring.cloud.consul.host=" + ConsulTestcontainers.getHost(), - "--spring.cloud.consul.port=" + ConsulTestcontainers.getPort(), + "--spring.config.import=consul:" + ConsulTestcontainers.getHost() + ":" + + ConsulTestcontainers.getPort(), "--spring.cloud.consul.config.prefix=" + ROOT, "--spring.cloud.consul.config.watch.delay=10");