commit
e522a09fba
|
@ -274,7 +274,7 @@ If you have already directly xref:features/external-config.adoc#features.externa
|
||||||
[[features.external-config.files.importing]]
|
[[features.external-config.files.importing]]
|
||||||
=== Importing Additional Data
|
=== Importing Additional Data
|
||||||
|
|
||||||
Application properties may import further config data from other locations using the `spring.config.import` property.
|
Application properties may import further config data from other locations using the configprop:spring.config.import[] property.
|
||||||
Imports are processed as they are discovered, and are treated as additional documents inserted immediately below the one that declares the import.
|
Imports are processed as they are discovered, and are treated as additional documents inserted immediately below the one that declares the import.
|
||||||
|
|
||||||
For example, you might have the following in your classpath `application.properties` file:
|
For example, you might have the following in your classpath `application.properties` file:
|
||||||
|
@ -293,6 +293,46 @@ Values from the imported `dev.properties` will take precedence over the file tha
|
||||||
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.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[features.external-config.files.importing.fixed-and-relative-paths]]
|
||||||
|
==== Using "`Fixed`" and "`Import Relative`" Locations
|
||||||
|
|
||||||
|
Imports may be specified as _fixed_ or _import relative_ locations.
|
||||||
|
An fixed location always resolves to the same underlying resource, regardless of the where the configprop:spring.config.import[] property is declared.
|
||||||
|
An import relative location resolves relative to file that declares the the configprop:spring.config.import[] property.
|
||||||
|
|
||||||
|
A location starting with a forward slash (`/`) or a URL style prefix (`file:`, `classpath:`, etc) is considered fixed.
|
||||||
|
All other locations are considered import relative.
|
||||||
|
|
||||||
|
NOTE: `optional:` prefixes are not considered when determining if a location is fixed or import relative.
|
||||||
|
|
||||||
|
As an example, say we have a `/demo` directory containing our `application.jar` file.
|
||||||
|
We might add a `/demo/application.properties` file with the following content:
|
||||||
|
|
||||||
|
[,properties]
|
||||||
|
----
|
||||||
|
spring.config.import=optional:core/core.properties
|
||||||
|
----
|
||||||
|
|
||||||
|
This is an import relative location and so will attempt to load the file `/demo/core/core.properties` if it exists.
|
||||||
|
|
||||||
|
If `/demo/core/core.properties` has the following content:
|
||||||
|
|
||||||
|
[,properties]
|
||||||
|
----
|
||||||
|
spring.config.import=optional:extra/extra.properties
|
||||||
|
----
|
||||||
|
|
||||||
|
It will attempt to load `/demo/core/extra/extra.properties`.
|
||||||
|
The `optional:extra/extra.properties` is relative to `/demo/core/core.properties` so the full directory is `/demo/core/` + `extra/extra.properties`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[[features.external-config.files.importing.import-property-order]]
|
||||||
|
==== Property Ordering
|
||||||
|
|
||||||
The order an import is defined inside a single document within the properties/yaml file does not matter.
|
The order an import is defined inside a single document within the properties/yaml file does not matter.
|
||||||
For instance, the two examples below produce the same result:
|
For instance, the two examples below produce the same result:
|
||||||
|
|
||||||
|
|
|
@ -166,8 +166,8 @@ public class StandardConfigDataLocationResolver
|
||||||
private String getResourceLocation(ConfigDataLocationResolverContext context,
|
private String getResourceLocation(ConfigDataLocationResolverContext context,
|
||||||
ConfigDataLocation configDataLocation) {
|
ConfigDataLocation configDataLocation) {
|
||||||
String resourceLocation = configDataLocation.getNonPrefixedValue(PREFIX);
|
String resourceLocation = configDataLocation.getNonPrefixedValue(PREFIX);
|
||||||
boolean isAbsolute = resourceLocation.startsWith("/") || URL_PREFIX.matcher(resourceLocation).matches();
|
boolean isFixedPath = resourceLocation.startsWith("/") || URL_PREFIX.matcher(resourceLocation).matches();
|
||||||
if (isAbsolute) {
|
if (isFixedPath) {
|
||||||
return resourceLocation;
|
return resourceLocation;
|
||||||
}
|
}
|
||||||
ConfigDataResource parent = context.getParent();
|
ConfigDataResource parent = context.getParent();
|
||||||
|
|
|
@ -167,7 +167,7 @@ class StandardConfigDataLocationResolverTests {
|
||||||
@WithResource(name = "config/1-first/testproperties.properties", content = "first.property=apple")
|
@WithResource(name = "config/1-first/testproperties.properties", content = "first.property=apple")
|
||||||
@WithResource(name = "config/2-second/testproperties.properties", content = "second.property=ball")
|
@WithResource(name = "config/2-second/testproperties.properties", content = "second.property=ball")
|
||||||
@WithResource(name = "config/nested/3-third/testproperties.properties", content = "third.property=shouldnotbefound")
|
@WithResource(name = "config/nested/3-third/testproperties.properties", content = "third.property=shouldnotbefound")
|
||||||
void resolveWhenLocationIsWildcardDirectoriesSortsAlphabeticallyBasedOnAbsolutePath(
|
void resolveWhenLocationIsWildcardDirectoriesSortsAlphabeticallyBasedOnFixedPath(
|
||||||
@ResourcesRoot Path resourcesRoot) {
|
@ResourcesRoot Path resourcesRoot) {
|
||||||
ConfigDataLocation location = ConfigDataLocation.of("file:" + resourcesRoot + "/config/*/");
|
ConfigDataLocation location = ConfigDataLocation.of("file:" + resourcesRoot + "/config/*/");
|
||||||
this.environment.setProperty("spring.config.name", "testproperties");
|
this.environment.setProperty("spring.config.name", "testproperties");
|
||||||
|
|
Loading…
Reference in New Issue