diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/HttpClientConfigurableHttpConnectionFactory.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/HttpClientConfigurableHttpConnectionFactory.java index 8196565c..13687499 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/HttpClientConfigurableHttpConnectionFactory.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/HttpClientConfigurableHttpConnectionFactory.java @@ -47,7 +47,10 @@ import static java.util.stream.Collectors.toMap; public class HttpClientConfigurableHttpConnectionFactory implements ConfigurableHttpConnectionFactory { - private static final String PLACEHOLDER_PATTERN = "\\{(\\w+)}"; + private static final String PLACEHOLDER_PATTERN_STRING = "\\{(\\w+)}"; + + private static final Pattern PLACEHOLDER_PATTERN = Pattern + .compile(PLACEHOLDER_PATTERN_STRING); Log log = LogFactory.getLog(getClass()); @@ -111,10 +114,9 @@ public class HttpClientConfigurableHttpConnectionFactory * which have no placeholders. That is the one we want to use in the case * there are multiple matches. */ - List keys = builderMap.keySet().stream().filter(key -> { - String[] tokens = key.split(PLACEHOLDER_PATTERN); - return tokens.length == 1; - }).collect(Collectors.toList()); + List keys = builderMap.keySet().stream() + .filter(key -> !PLACEHOLDER_PATTERN.matcher(key).find()) + .collect(Collectors.toList()); if (keys.size() == 1) { return builderMap.get(keys.get(0)); @@ -130,7 +132,7 @@ public class HttpClientConfigurableHttpConnectionFactory private String getUrlWithPlaceholders(URL url, String key) { String spec = url.toString(); - String[] tokens = key.split(PLACEHOLDER_PATTERN); + String[] tokens = key.split(PLACEHOLDER_PATTERN_STRING); // if token[0] equals url then there was no placeholder in the the url, so // matching needed if (tokens.length >= 1 && !tokens[0].equals(url.toString())) { @@ -164,7 +166,7 @@ public class HttpClientConfigurableHttpConnectionFactory } private List getPlaceholders(String key) { - Pattern pattern = Pattern.compile(PLACEHOLDER_PATTERN); + Pattern pattern = Pattern.compile(PLACEHOLDER_PATTERN_STRING); Matcher matcher = pattern.matcher(key); List placeholders = new LinkedList<>(); while (matcher.find()) { diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/HttpClientConfigurableHttpConnectionFactoryTest.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/HttpClientConfigurableHttpConnectionFactoryTest.java index 71bfa827..961bd514 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/HttpClientConfigurableHttpConnectionFactoryTest.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/HttpClientConfigurableHttpConnectionFactoryTest.java @@ -162,14 +162,17 @@ public class HttpClientConfigurableHttpConnectionFactoryTest { @Test public void multipleMatchesWithPlaceholder() throws Exception { MultipleJGitEnvironmentProperties properties1 = new MultipleJGitEnvironmentProperties(); - properties1.setUri("https://github.com/marnee01/mderider-{application}.git"); + properties1.setUri("https://github.com/user/user-{application}.git"); MultipleJGitEnvironmentProperties properties2 = new MultipleJGitEnvironmentProperties(); - properties2.setUri("https://github.com/marnee01/mderider-MultiApps.git"); + properties2.setUri("https://github.com/user/user-MultiApps.git"); + MultipleJGitEnvironmentProperties properties3 = new MultipleJGitEnvironmentProperties(); + properties1.setUri("https://github.com/user/user-{application}"); this.connectionFactory.addConfiguration(properties1); this.connectionFactory.addConfiguration(properties2); + this.connectionFactory.addConfiguration(properties3); HttpConnection actualConnection = this.connectionFactory.create(new URL( - "https://github.com/marnee01/mderider-MultiApps.git/info/refs?service=git-upload-pack")); + "https://github.com/user/user-MultiApps.git/info/refs?service=git-upload-pack")); HttpClientBuilder expectedHttpClientBuilder = this.connectionFactory.httpClientBuildersByUri .get(properties2.getUri()); HttpClientBuilder actualHttpClientBuilder = getActualHttpClientBuilder(