Add defaultValue property in springProperty tag

This commit adds a `defaultValue` attribute to the `springProperty` tag
of Logback. That attribute can be used to specify a default value.

Closes gh-5447
This commit is contained in:
Eddú Meléndez
2016-03-29 21:36:56 +10:00
committed by Stephane Nicoll
parent 54bea72554
commit c86284cea3
3 changed files with 19 additions and 2 deletions

View File

@@ -32,10 +32,12 @@ import org.springframework.core.env.Environment;
* properties to be sourced from the Spring environment.
*
* @author Phillip Webb
* @author Eddú Meléndez
*/
class SpringPropertyAction extends Action {
private static final String SOURCE_ATTRIBUTE = "source";
private static final String DEFAULT_VALUE_ATTRIBUTE = "defaultValue";
private final Environment environment;
@@ -49,18 +51,22 @@ class SpringPropertyAction extends Action {
String name = attributes.getValue(NAME_ATTRIBUTE);
String source = attributes.getValue(SOURCE_ATTRIBUTE);
Scope scope = ActionUtil.stringToScope(attributes.getValue(SCOPE_ATTRIBUTE));
String defaultValue = attributes.getValue(DEFAULT_VALUE_ATTRIBUTE);
if (OptionHelper.isEmpty(name) || OptionHelper.isEmpty(source)) {
addError(
"The \"name\" and \"source\" attributes of <springProperty> must be set");
}
ActionUtil.setProperty(ic, name, getValue(source), scope);
ActionUtil.setProperty(ic, name, getValue(source, defaultValue), scope);
}
private String getValue(String source) {
private String getValue(String source, String defaultValue) {
if (this.environment == null) {
addWarn("No Spring Environment available to resolve " + source);
return null;
}
if (source == null) {
return defaultValue;
}
String value = this.environment.getProperty(source);
if (value != null) {
return value;

View File

@@ -140,6 +140,12 @@ public class SpringBootJoranConfiguratorTests {
assertThat(this.context.getProperty("MINE")).isEqualTo("test");
}
@Test
public void springPropertyWithDefaultValue() throws Exception {
initialize("property-defaultValue.xml");
assertThat(this.context.getProperty("MINE")).isEqualTo("foo");
}
private void doTestNestedProfile(boolean expected, String... profiles)
throws JoranException {
this.environment.setActiveProfiles(profiles);

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<springProperty scope="context" name="MINE" defaultValue="foo"/>
</configuration>