Fail hard if spring.profiles.include is used with new config processing
Closes gh-22693
This commit is contained in:
parent
e719a246df
commit
b9abcf1615
|
@ -1742,21 +1742,9 @@ The configprop:spring.profiles.active[] property follows the same ordering rules
|
||||||
This means that you can specify active profiles in `application.properties` and then *replace* them by using the command line switch.
|
This means that you can specify active profiles in `application.properties` and then *replace* them by using the command line switch.
|
||||||
|
|
||||||
Sometimes, it is useful to have properties that *add* to the active profiles rather than replace them.
|
Sometimes, it is useful to have properties that *add* to the active profiles rather than replace them.
|
||||||
The configprop:spring.profiles.include[] property can be used to unconditionally add active profiles.
|
The `SpringApplication` entry point has a Java API for setting additional profiles (that is, on top of those activated by the configprop:spring.profiles.active[] property).
|
||||||
The `SpringApplication` entry point also has a Java API for setting additional profiles (that is, on top of those activated by the configprop:spring.profiles.active[] property).
|
|
||||||
See the `setAdditionalProfiles()` method in {spring-boot-module-api}/SpringApplication.html[SpringApplication].
|
See the `setAdditionalProfiles()` method in {spring-boot-module-api}/SpringApplication.html[SpringApplication].
|
||||||
|
Profile groups, which are described in the <<boot-features-profiles-groups,next section>> can also be used to add active profiles if a given profile is active.
|
||||||
For example, when an application with the following properties is run by using the switch, `--spring.profiles.active=custom`, the `other` and `extra` profiles are still activated:
|
|
||||||
|
|
||||||
[source,yaml,indent=0]
|
|
||||||
----
|
|
||||||
---
|
|
||||||
my.property: fromyamlfile
|
|
||||||
spring.profiles.include:
|
|
||||||
- other
|
|
||||||
- extra
|
|
||||||
----
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[[boot-features-profiles-groups]]
|
[[boot-features-profiles-groups]]
|
||||||
|
|
|
@ -35,7 +35,7 @@ import org.springframework.boot.context.properties.source.ConfigurationPropertyS
|
||||||
*/
|
*/
|
||||||
public class InvalidConfigDataPropertyException extends ConfigDataException {
|
public class InvalidConfigDataPropertyException extends ConfigDataException {
|
||||||
|
|
||||||
private static final Map<ConfigurationPropertyName, ConfigurationPropertyName> ERROR = Collections.emptyMap();
|
private static final Map<ConfigurationPropertyName, ConfigurationPropertyName> ERROR;
|
||||||
|
|
||||||
private static final Map<ConfigurationPropertyName, ConfigurationPropertyName> WARNING;
|
private static final Map<ConfigurationPropertyName, ConfigurationPropertyName> WARNING;
|
||||||
static {
|
static {
|
||||||
|
@ -43,6 +43,10 @@ public class InvalidConfigDataPropertyException extends ConfigDataException {
|
||||||
warning.put(ConfigurationPropertyName.of("spring.profiles"),
|
warning.put(ConfigurationPropertyName.of("spring.profiles"),
|
||||||
ConfigurationPropertyName.of("spring.config.activate.on-profile"));
|
ConfigurationPropertyName.of("spring.config.activate.on-profile"));
|
||||||
WARNING = Collections.unmodifiableMap(warning);
|
WARNING = Collections.unmodifiableMap(warning);
|
||||||
|
Map<ConfigurationPropertyName, ConfigurationPropertyName> error = new LinkedHashMap<>();
|
||||||
|
error.put(ConfigurationPropertyName.of("spring.profiles.include"),
|
||||||
|
ConfigurationPropertyName.of("spring.profiles.group"));
|
||||||
|
ERROR = Collections.unmodifiableMap(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final ConfigurationProperty property;
|
private final ConfigurationProperty property;
|
||||||
|
|
|
@ -123,6 +123,17 @@ class InvalidConfigDataPropertyExceptionTests {
|
||||||
+ "'spring.config.activate.on-profile' [origin: \"spring.profiles\" from property source \"mockProperties\"]");
|
+ "'spring.config.activate.on-profile' [origin: \"spring.profiles\" from property source \"mockProperties\"]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void throwOrWarnWhenHasErrorPropertyThrowsException() {
|
||||||
|
MockPropertySource propertySource = new MockPropertySource();
|
||||||
|
propertySource.setProperty("spring.profiles.include", "a");
|
||||||
|
ConfigDataEnvironmentContributor contributor = ConfigDataEnvironmentContributor.ofExisting(propertySource);
|
||||||
|
assertThatExceptionOfType(InvalidConfigDataPropertyException.class)
|
||||||
|
.isThrownBy(() -> InvalidConfigDataPropertyException.throwOrWarn(this.logger, contributor))
|
||||||
|
.withMessage("Property 'spring.profiles.include' is invalid and should be replaced with "
|
||||||
|
+ "'spring.profiles.group' [origin: \"spring.profiles.include\" from property source \"mockProperties\"]");
|
||||||
|
}
|
||||||
|
|
||||||
private static class TestConfigDataLocation extends ConfigDataLocation {
|
private static class TestConfigDataLocation extends ConfigDataLocation {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue