Commit c3b873c1 authored by Phillip Webb's avatar Phillip Webb

Merge branch '2.4.x' into 2.5.x

Closes gh-26939
parents 79f47b15 b5c92d51
...@@ -141,7 +141,10 @@ They must be defined as an environment property (typically an OS environment var ...@@ -141,7 +141,10 @@ They must be defined as an environment property (typically an OS environment var
If `spring.config.location` contains directories (as opposed to files), they should end in `/`. If `spring.config.location` contains directories (as opposed to files), they should end in `/`.
At runtime they will be appended with the names generated from `spring.config.name` before being loaded. At runtime they will be appended with the names generated from `spring.config.name` before being loaded.
Files specified in `spring.config.location` are used as-is. Files specified in `spring.config.location` are imported directly.
NOTE: Both directory and file location values are also expanded to check for <<boot-features-external-config-files-profile-specific,profile-specific files>>.
For example, if you have a `spring.config.location` of `classpath:myconfig.properties`, you will also find appropriate `classpath:myconfig-<profile>.properties` files are loaded.
In most situations, each configprop:spring.config.location[] item you add will reference a single file or directory. In most situations, each configprop:spring.config.location[] item you add will reference a single file or directory.
Locations are processed in the order that they are defined and later ones can override the values of earlier ones. Locations are processed in the order that they are defined and later ones can override the values of earlier ones.
...@@ -281,6 +284,7 @@ For example, you might have the following in your classpath `application.propert ...@@ -281,6 +284,7 @@ For example, you might have the following in your classpath `application.propert
This will trigger the import of a `dev.properties` file in current directory (if such a file exists). This will trigger the import of a `dev.properties` file in current directory (if such a file exists).
Values from the imported `dev.properties` will take precedence over the file that triggered the import. Values from the imported `dev.properties` will take precedence over the file that triggered the import.
In the above example, the `dev.properties` could redefine `spring.application.name` to a different value. In the above example, the `dev.properties` could redefine `spring.application.name` to a different value.
An import will only be imported once no matter how many times it is declared. An import will only be imported once no matter how many times it is declared.
The order an import is defined inside a single document within the properties/yaml file doesn't matter. The order an import is defined inside a single document within the properties/yaml file doesn't matter.
For instance, the two examples below produce the same result: For instance, the two examples below produce the same result:
...@@ -308,6 +312,9 @@ In both of the above examples, the values from the `my.properties` file will tak ...@@ -308,6 +312,9 @@ In both of the above examples, the values from the `my.properties` file will tak
Several locations can be specified under a single `spring.config.import` key. Several locations can be specified under a single `spring.config.import` key.
Locations will be processed in the order that they are defined, with later imports taking precedence. Locations will be processed in the order that they are defined, with later imports taking precedence.
NOTE: When appropriate, <<boot-features-external-config-files-profile-specific, Profile-specific variants>> are also considered for import.
The example above would import both `my.properties` as well as any `my-<profile>.properties` variants.
[TIP] [TIP]
==== ====
Spring Boot includes pluggable API that allows various different location addresses to be supported. Spring Boot includes pluggable API that allows various different location addresses to be supported.
......
...@@ -145,9 +145,6 @@ public class StandardConfigDataLocationResolver ...@@ -145,9 +145,6 @@ public class StandardConfigDataLocationResolver
@Override @Override
public List<StandardConfigDataResource> resolveProfileSpecific(ConfigDataLocationResolverContext context, public List<StandardConfigDataResource> resolveProfileSpecific(ConfigDataLocationResolverContext context,
ConfigDataLocation location, Profiles profiles) { ConfigDataLocation location, Profiles profiles) {
if (context.getParent() != null) {
return null;
}
return resolve(getProfileSpecificReferences(context, location.split(), profiles)); return resolve(getProfileSpecificReferences(context, location.split(), profiles));
} }
......
...@@ -611,13 +611,13 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { ...@@ -611,13 +611,13 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests {
assertThat(context.getEnvironment().getProperty("my.value")).isEqualTo("iwasimported"); assertThat(context.getEnvironment().getProperty("my.value")).isEqualTo("iwasimported");
} }
@Test @Test // gh-26858
void runWhenImportWithProfileVariantOrdersPropertySourcesCorrectly() { void runWhenImportWithProfileVariantOrdersPropertySourcesCorrectly() {
this.application.setAdditionalProfiles("dev"); this.application.setAdditionalProfiles("dev");
ConfigurableApplicationContext context = this.application ConfigurableApplicationContext context = this.application
.run("--spring.config.location=classpath:application-import-with-profile-variant.properties"); .run("--spring.config.location=classpath:application-import-with-profile-variant.properties");
assertThat(context.getEnvironment().getProperty("my.value")) assertThat(context.getEnvironment().getProperty("my.value"))
.isEqualTo("application-import-with-profile-variant-dev"); .isEqualTo("application-import-with-profile-variant-imported-dev");
} }
@Test @Test
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment