diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerBootstrapper.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerBootstrapper.java index 3f917923..2ec29cbf 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerBootstrapper.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerBootstrapper.java @@ -67,7 +67,7 @@ public class ConfigServerBootstrapper implements Bootstrapper { @FunctionalInterface public interface LoaderInvocation - extends BiFunction { + extends BiFunction { } @@ -75,13 +75,13 @@ public class ConfigServerBootstrapper implements Bootstrapper { private final ConfigDataLoaderContext loaderContext; - private final ConfigServerConfigDataLocation location; + private final ConfigServerConfigDataResource location; private final Binder binder; private final LoaderInvocation invocation; - LoadContext(ConfigDataLoaderContext loaderContext, ConfigServerConfigDataLocation location, Binder binder, + LoadContext(ConfigDataLoaderContext loaderContext, ConfigServerConfigDataResource location, Binder binder, LoaderInvocation invocation) { Assert.notNull(loaderContext, "loaderContext may not be null"); Assert.notNull(location, "location may not be null"); @@ -97,7 +97,7 @@ public class ConfigServerBootstrapper implements Bootstrapper { return this.loaderContext; } - public ConfigServerConfigDataLocation getLocation() { + public ConfigServerConfigDataResource getLocation() { return this.location; } diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java index 8f86399d..7a78615d 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java @@ -56,7 +56,7 @@ import static org.springframework.cloud.config.client.ConfigClientProperties.AUT import static org.springframework.cloud.config.client.ConfigClientProperties.STATE_HEADER; import static org.springframework.cloud.config.client.ConfigClientProperties.TOKEN_HEADER; -public class ConfigServerConfigDataLoader implements ConfigDataLoader, Ordered { +public class ConfigServerConfigDataLoader implements ConfigDataLoader, Ordered { protected final Log logger; @@ -71,7 +71,7 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader> composite = new ArrayList<>(); Exception error = null; String errorBody = null; @@ -97,7 +97,7 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader 1) { diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolver.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolver.java index c9bafea0..e3a975a7 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolver.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolver.java @@ -26,8 +26,11 @@ import org.apache.commons.logging.Log; import org.springframework.boot.BootstrapRegistry.InstanceSupplier; import org.springframework.boot.ConfigurableBootstrapContext; +import org.springframework.boot.context.config.ConfigDataLocation; +import org.springframework.boot.context.config.ConfigDataLocationNotFoundException; import org.springframework.boot.context.config.ConfigDataLocationResolver; import org.springframework.boot.context.config.ConfigDataLocationResolverContext; +import org.springframework.boot.context.config.ConfigDataResourceNotFoundException; import org.springframework.boot.context.config.Profiles; import org.springframework.boot.context.properties.bind.Bindable; import org.springframework.boot.context.properties.bind.Binder; @@ -40,7 +43,7 @@ import static org.springframework.cloud.config.client.ConfigClientProperties.AUT import static org.springframework.cloud.config.client.ConfigClientProperties.CONFIG_DISCOVERY_ENABLED; public class ConfigServerConfigDataLocationResolver - implements ConfigDataLocationResolver, Ordered { + implements ConfigDataLocationResolver, Ordered { /** * Prefix for Config Server imports. @@ -94,8 +97,9 @@ public class ConfigServerConfigDataLocationResolver return this.log; } - public boolean isResolvable(ConfigDataLocationResolverContext context, String location) { - if (!location.startsWith(getPrefix())) { + @Override + public boolean isResolvable(ConfigDataLocationResolverContext context, ConfigDataLocation location) { + if (!location.hasPrefix(getPrefix())) { return false; } return context.getBinder().bind(ConfigClientProperties.PREFIX + ".enabled", Boolean.class).orElse(true); @@ -105,17 +109,20 @@ public class ConfigServerConfigDataLocationResolver return PREFIX; } - public List resolve(ConfigDataLocationResolverContext context, String location, - boolean optional) { + @Override + public List resolve(ConfigDataLocationResolverContext context, + ConfigDataLocation location) + throws ConfigDataLocationNotFoundException, ConfigDataResourceNotFoundException { return Collections.emptyList(); } - public List resolveProfileSpecific( - ConfigDataLocationResolverContext resolverContext, String location, boolean optional, Profiles profiles) { - + @Override + public List resolveProfileSpecific( + ConfigDataLocationResolverContext resolverContext, ConfigDataLocation location, Profiles profiles) + throws ConfigDataLocationNotFoundException { ConfigClientProperties properties = loadProperties(resolverContext.getBinder()); - String uris = (location.startsWith(getPrefix())) ? location.substring(getPrefix().length()) : location; + String uris = location.getNonPrefixedValue(getPrefix()); if (StringUtils.hasText(uris)) { String[] uri = StringUtils.commaDelimitedListToStringArray(uris); @@ -159,8 +166,8 @@ public class ConfigServerConfigDataLocationResolver }); } - List locations = new ArrayList<>(); - locations.add(new ConfigServerConfigDataLocation(properties, optional, profiles)); + List locations = new ArrayList<>(); + locations.add(new ConfigServerConfigDataResource(properties, location.isOptional(), profiles)); return locations; } diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocation.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataResource.java similarity index 87% rename from spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocation.java rename to spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataResource.java index 4abfac8b..4f794e46 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocation.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataResource.java @@ -18,11 +18,11 @@ package org.springframework.cloud.config.client; import java.util.Objects; -import org.springframework.boot.context.config.ConfigDataLocation; +import org.springframework.boot.context.config.ConfigDataResource; import org.springframework.boot.context.config.Profiles; import org.springframework.core.style.ToStringCreator; -public class ConfigServerConfigDataLocation extends ConfigDataLocation { +public class ConfigServerConfigDataResource extends ConfigDataResource { private final ConfigClientProperties properties; @@ -30,7 +30,7 @@ public class ConfigServerConfigDataLocation extends ConfigDataLocation { private final Profiles profiles; - public ConfigServerConfigDataLocation(ConfigClientProperties properties, boolean optional, Profiles profiles) { + public ConfigServerConfigDataResource(ConfigClientProperties properties, boolean optional, Profiles profiles) { this.properties = properties; this.optional = optional; this.profiles = profiles; @@ -56,7 +56,7 @@ public class ConfigServerConfigDataLocation extends ConfigDataLocation { if (o == null || getClass() != o.getClass()) { return false; } - ConfigServerConfigDataLocation that = (ConfigServerConfigDataLocation) o; + ConfigServerConfigDataResource that = (ConfigServerConfigDataResource) o; return Objects.equals(this.properties, that.properties) && Objects.equals(this.optional, that.optional) && Objects.equals(this.profiles, that.profiles); } diff --git a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java index bcc25e46..9e4112e2 100644 --- a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java +++ b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java @@ -19,6 +19,7 @@ package org.springframework.cloud.config.client; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.boot.context.config.ConfigDataLocation; import org.springframework.boot.context.config.ConfigDataLocationResolverContext; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.logging.DeferredLog; @@ -48,18 +49,18 @@ public class ConfigServerConfigDataLocationResolverTests { @Test void isResolvableReturnsFalseWithIncorrectPrefix() { - assertThat(this.resolver.isResolvable(this.context, "test:")).isFalse(); + assertThat(this.resolver.isResolvable(this.context, ConfigDataLocation.of("test:"))).isFalse(); } @Test void isResolvableReturnsTrueWithCorrectPrefix() { - assertThat(this.resolver.isResolvable(this.context, "configserver:")).isTrue(); + assertThat(this.resolver.isResolvable(this.context, ConfigDataLocation.of("configserver:"))).isTrue(); } @Test void isResolvableReturnsFalseWhenDisabled() { this.environment.setProperty(ConfigClientProperties.PREFIX + ".enabled", "false"); - assertThat(this.resolver.isResolvable(this.context, "configserver:")).isFalse(); + assertThat(this.resolver.isResolvable(this.context, ConfigDataLocation.of("configserver:"))).isFalse(); } } diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java index 8f0bc5df..467c7fd7 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepository.java @@ -54,8 +54,7 @@ public class NativeEnvironmentRepository implements EnvironmentRepository, Searc private static final String[] DEFAULT_LOCATIONS = new String[] { "classpath:/", "classpath:/config/", "file:./", "file:./config/" }; - private static final Pattern RESOURCE_PATTERN = Pattern - .compile("Resource config '(.*?)' imported via location \".*\""); + static final Pattern RESOURCE_PATTERN = Pattern.compile("Config resource '(.*?)' via location.*"); private static Log logger = LogFactory.getLog(NativeEnvironmentRepository.class); @@ -213,7 +212,7 @@ public class NativeEnvironmentRepository implements EnvironmentRepository, Searc map.put("spring.config.location", StringUtils.arrayToCommaDelimitedString(getLocations(application, profile, label).getLocations())); // globally ignore config files that are not found - map.put("spring.config.on-location-not-found", "ignore"); + map.put("spring.config.on-not-found", "IGNORE"); environment.getPropertySources().addFirst(new MapPropertySource("config-data-setup", map)); return environment; } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryTests.java index f005e15e..395d7c72 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/NativeEnvironmentRepositoryTests.java @@ -16,6 +16,8 @@ package org.springframework.cloud.config.server.environment; +import java.util.regex.Matcher; + import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -42,7 +44,8 @@ public class NativeEnvironmentRepositoryTests { @Before public void init() { ConfigurableApplicationContext context = new SpringApplicationBuilder(NativeEnvironmentRepositoryTests.class) - .web(WebApplicationType.NONE).run(); + .properties("logging.level.org.springframework.boot.context.config=TRACE").web(WebApplicationType.NONE) + .run(); this.repository = new NativeEnvironmentRepository(context.getEnvironment(), new NativeEnvironmentProperties()); this.repository.setVersion("myversion"); this.repository.setDefaultLabel(null); @@ -215,4 +218,12 @@ public class NativeEnvironmentRepositoryTests { + " ^\n"); } + @Test + public void resourcePatternWorks() { + String name = "Config resource 'abc' via location '123'"; + Matcher matcher = NativeEnvironmentRepository.RESOURCE_PATTERN.matcher(name); + assertThat(matcher.find()).isTrue(); + assertThat(matcher.group(1)).isEqualTo("abc"); + } + }