Updates ConfigData to use updated api
See gh-1715
This commit is contained in:
@@ -67,7 +67,7 @@ public class ConfigServerBootstrapper implements Bootstrapper {
|
||||
|
||||
@FunctionalInterface
|
||||
public interface LoaderInvocation
|
||||
extends BiFunction<ConfigDataLoaderContext, ConfigServerConfigDataLocation, ConfigData> {
|
||||
extends BiFunction<ConfigDataLoaderContext, ConfigServerConfigDataResource, ConfigData> {
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<ConfigServerConfigDataLocation>, Ordered {
|
||||
public class ConfigServerConfigDataLoader implements ConfigDataLoader<ConfigServerConfigDataResource>, Ordered {
|
||||
|
||||
protected final Log logger;
|
||||
|
||||
@@ -71,7 +71,7 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader<ConfigServ
|
||||
|
||||
@Override
|
||||
// TODO: implement retry LoaderInterceptor
|
||||
public ConfigData load(ConfigDataLoaderContext context, ConfigServerConfigDataLocation location) {
|
||||
public ConfigData load(ConfigDataLoaderContext context, ConfigServerConfigDataResource resource) {
|
||||
if (context.getBootstrapContext().isRegistered(ConfigServerInstanceMonitor.class)) {
|
||||
// force initialization if needed
|
||||
context.getBootstrapContext().get(ConfigServerInstanceMonitor.class);
|
||||
@@ -79,13 +79,13 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader<ConfigServ
|
||||
if (context.getBootstrapContext().isRegistered(LoaderInterceptor.class)) {
|
||||
LoaderInterceptor interceptor = context.getBootstrapContext().get(LoaderInterceptor.class);
|
||||
Binder binder = context.getBootstrapContext().get(Binder.class);
|
||||
return interceptor.apply(new LoadContext(context, location, binder, this::doLoad));
|
||||
return interceptor.apply(new LoadContext(context, resource, binder, this::doLoad));
|
||||
}
|
||||
return doLoad(context, location);
|
||||
return doLoad(context, resource);
|
||||
}
|
||||
|
||||
public ConfigData doLoad(ConfigDataLoaderContext context, ConfigServerConfigDataLocation location) {
|
||||
ConfigClientProperties properties = location.getProperties();
|
||||
public ConfigData doLoad(ConfigDataLoaderContext context, ConfigServerConfigDataResource resource) {
|
||||
ConfigClientProperties properties = resource.getProperties();
|
||||
List<PropertySource<?>> composite = new ArrayList<>();
|
||||
Exception error = null;
|
||||
String errorBody = null;
|
||||
@@ -97,7 +97,7 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader<ConfigServ
|
||||
String state = ConfigClientStateHolder.getState();
|
||||
// Try all the labels until one works
|
||||
for (String label : labels) {
|
||||
Environment result = getRemoteEnvironment(context, location, label.trim(), state);
|
||||
Environment result = getRemoteEnvironment(context, resource, label.trim(), state);
|
||||
if (result != null) {
|
||||
log(result);
|
||||
|
||||
@@ -137,13 +137,13 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader<ConfigServ
|
||||
catch (Exception e) {
|
||||
error = e;
|
||||
}
|
||||
if (properties.isFailFast() || !location.isOptional()) {
|
||||
if (properties.isFailFast() || !resource.isOptional()) {
|
||||
String reason;
|
||||
if (properties.isFailFast()) {
|
||||
reason = "the fail fast property is set";
|
||||
}
|
||||
else {
|
||||
reason = "the location is not optional";
|
||||
reason = "the resource is not optional";
|
||||
}
|
||||
throw new IllegalStateException("Could not locate PropertySource and " + reason + ", failing"
|
||||
+ (errorBody == null ? "" : ": " + errorBody), error);
|
||||
@@ -203,14 +203,14 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader<ConfigServ
|
||||
}
|
||||
}
|
||||
|
||||
protected Environment getRemoteEnvironment(ConfigDataLoaderContext context, ConfigServerConfigDataLocation location,
|
||||
protected Environment getRemoteEnvironment(ConfigDataLoaderContext context, ConfigServerConfigDataResource resource,
|
||||
String label, String state) {
|
||||
ConfigClientProperties properties = location.getProperties();
|
||||
ConfigClientProperties properties = resource.getProperties();
|
||||
RestTemplate restTemplate = context.getBootstrapContext().get(RestTemplate.class);
|
||||
|
||||
String path = "/{name}/{profile}";
|
||||
String name = properties.getName();
|
||||
String profile = StringUtils.collectionToCommaDelimitedString(location.getProfiles().getAccepted());
|
||||
String profile = StringUtils.collectionToCommaDelimitedString(resource.getProfiles().getAccepted());
|
||||
String token = properties.getToken();
|
||||
int noOfUrls = properties.getUri().length;
|
||||
if (noOfUrls > 1) {
|
||||
|
||||
@@ -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<ConfigServerConfigDataLocation>, Ordered {
|
||||
implements ConfigDataLocationResolver<ConfigServerConfigDataResource>, 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<ConfigServerConfigDataLocation> resolve(ConfigDataLocationResolverContext context, String location,
|
||||
boolean optional) {
|
||||
@Override
|
||||
public List<ConfigServerConfigDataResource> resolve(ConfigDataLocationResolverContext context,
|
||||
ConfigDataLocation location)
|
||||
throws ConfigDataLocationNotFoundException, ConfigDataResourceNotFoundException {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
public List<ConfigServerConfigDataLocation> resolveProfileSpecific(
|
||||
ConfigDataLocationResolverContext resolverContext, String location, boolean optional, Profiles profiles) {
|
||||
|
||||
@Override
|
||||
public List<ConfigServerConfigDataResource> 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<ConfigServerConfigDataLocation> locations = new ArrayList<>();
|
||||
locations.add(new ConfigServerConfigDataLocation(properties, optional, profiles));
|
||||
List<ConfigServerConfigDataResource> locations = new ArrayList<>();
|
||||
locations.add(new ConfigServerConfigDataResource(properties, location.isOptional(), profiles));
|
||||
|
||||
return locations;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user