commit
ba1e5fb5e8
|
@ -233,7 +233,7 @@ class ConfigDataEnvironment {
|
||||||
contributors = processWithoutProfiles(contributors, importer, activationContext);
|
contributors = processWithoutProfiles(contributors, importer, activationContext);
|
||||||
activationContext = withProfiles(contributors, activationContext);
|
activationContext = withProfiles(contributors, activationContext);
|
||||||
contributors = processWithProfiles(contributors, importer, activationContext);
|
contributors = processWithProfiles(contributors, importer, activationContext);
|
||||||
applyToEnvironment(contributors, activationContext);
|
applyToEnvironment(contributors, activationContext, importer.getLoadedLocations());
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConfigDataEnvironmentContributors processInitial(ConfigDataEnvironmentContributors contributors,
|
private ConfigDataEnvironmentContributors processInitial(ConfigDataEnvironmentContributors contributors,
|
||||||
|
@ -320,9 +320,9 @@ class ConfigDataEnvironment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyToEnvironment(ConfigDataEnvironmentContributors contributors,
|
private void applyToEnvironment(ConfigDataEnvironmentContributors contributors,
|
||||||
ConfigDataActivationContext activationContext) {
|
ConfigDataActivationContext activationContext, Set<ConfigDataLocation> loadedLocations) {
|
||||||
checkForInvalidProperties(contributors);
|
checkForInvalidProperties(contributors);
|
||||||
checkMandatoryLocations(contributors, activationContext);
|
checkMandatoryLocations(contributors, activationContext, loadedLocations);
|
||||||
MutablePropertySources propertySources = this.environment.getPropertySources();
|
MutablePropertySources propertySources = this.environment.getPropertySources();
|
||||||
this.logger.trace("Applying config data environment contributions");
|
this.logger.trace("Applying config data environment contributions");
|
||||||
for (ConfigDataEnvironmentContributor contributor : contributors) {
|
for (ConfigDataEnvironmentContributor contributor : contributors) {
|
||||||
|
@ -357,7 +357,7 @@ class ConfigDataEnvironment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkMandatoryLocations(ConfigDataEnvironmentContributors contributors,
|
private void checkMandatoryLocations(ConfigDataEnvironmentContributors contributors,
|
||||||
ConfigDataActivationContext activationContext) {
|
ConfigDataActivationContext activationContext, Set<ConfigDataLocation> loadedLocations) {
|
||||||
Set<ConfigDataLocation> mandatoryLocations = new LinkedHashSet<>();
|
Set<ConfigDataLocation> mandatoryLocations = new LinkedHashSet<>();
|
||||||
for (ConfigDataEnvironmentContributor contributor : contributors) {
|
for (ConfigDataEnvironmentContributor contributor : contributors) {
|
||||||
if (contributor.isActive(activationContext)) {
|
if (contributor.isActive(activationContext)) {
|
||||||
|
@ -369,6 +369,7 @@ class ConfigDataEnvironment {
|
||||||
mandatoryLocations.remove(contributor.getLocation());
|
mandatoryLocations.remove(contributor.getLocation());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mandatoryLocations.removeAll(loadedLocations);
|
||||||
if (!mandatoryLocations.isEmpty()) {
|
if (!mandatoryLocations.isEmpty()) {
|
||||||
for (ConfigDataLocation mandatoryLocation : mandatoryLocations) {
|
for (ConfigDataLocation mandatoryLocation : mandatoryLocations) {
|
||||||
this.notFoundAction.handle(this.logger, new ConfigDataLocationNotFoundException(mandatoryLocation));
|
this.notFoundAction.handle(this.logger, new ConfigDataLocationNotFoundException(mandatoryLocation));
|
||||||
|
|
|
@ -49,6 +49,8 @@ class ConfigDataImporter {
|
||||||
|
|
||||||
private final Set<ConfigDataResource> loaded = new HashSet<>();
|
private final Set<ConfigDataResource> loaded = new HashSet<>();
|
||||||
|
|
||||||
|
private final Set<ConfigDataLocation> loadedLocations = new HashSet<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new {@link ConfigDataImporter} instance.
|
* Create a new {@link ConfigDataImporter} instance.
|
||||||
* @param logFactory the log factory
|
* @param logFactory the log factory
|
||||||
|
@ -113,10 +115,15 @@ class ConfigDataImporter {
|
||||||
ConfigDataResolutionResult candidate = candidates.get(i);
|
ConfigDataResolutionResult candidate = candidates.get(i);
|
||||||
ConfigDataLocation location = candidate.getLocation();
|
ConfigDataLocation location = candidate.getLocation();
|
||||||
ConfigDataResource resource = candidate.getResource();
|
ConfigDataResource resource = candidate.getResource();
|
||||||
if (this.loaded.add(resource)) {
|
if (this.loaded.contains(resource)) {
|
||||||
|
this.loadedLocations.add(location);
|
||||||
|
}
|
||||||
|
else {
|
||||||
try {
|
try {
|
||||||
ConfigData loaded = this.loaders.load(loaderContext, resource);
|
ConfigData loaded = this.loaders.load(loaderContext, resource);
|
||||||
if (loaded != null) {
|
if (loaded != null) {
|
||||||
|
this.loaded.add(resource);
|
||||||
|
this.loadedLocations.add(location);
|
||||||
result.put(candidate, loaded);
|
result.put(candidate, loaded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,4 +146,8 @@ class ConfigDataImporter {
|
||||||
return (!location.isOptional()) ? this.notFoundAction : ConfigDataNotFoundAction.IGNORE;
|
return (!location.isOptional()) ? this.notFoundAction : ConfigDataNotFoundAction.IGNORE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Set<ConfigDataLocation> getLoadedLocations() {
|
||||||
|
return this.loadedLocations;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -604,6 +604,14 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests {
|
||||||
assertThat(context.getEnvironment().getProperty("my.value")).isEqualTo("iwasimported-dev");
|
assertThat(context.getEnvironment().getProperty("my.value")).isEqualTo("iwasimported-dev");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void runWhenImportWithProfileVariantAndDirectProfileImportOrdersPropertySourcesCorrectly() {
|
||||||
|
this.application.setAdditionalProfiles("dev");
|
||||||
|
ConfigurableApplicationContext context = this.application.run(
|
||||||
|
"--spring.config.location=classpath:application-import-with-profile-variant-and-direct-profile-import.properties");
|
||||||
|
assertThat(context.getEnvironment().getProperty("my.value")).isEqualTo("iwasimported-dev");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void runWhenHasPropertyInProfileDocumentThrowsException() {
|
void runWhenHasPropertyInProfileDocumentThrowsException() {
|
||||||
assertThatExceptionOfType(BindException.class).isThrownBy(() -> this.application.run(
|
assertThatExceptionOfType(BindException.class).isThrownBy(() -> this.application.run(
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
spring.config.import=classpath:application-import-with-profile-variant-imported-dev.properties
|
||||||
|
my.value=notimported-dev
|
|
@ -0,0 +1,2 @@
|
||||||
|
spring.config.import=classpath:application-import-with-profile-variant-imported.properties
|
||||||
|
my.value=notimported
|
Loading…
Reference in New Issue