Commit 3ad43e0d authored by Dave Syer's avatar Dave Syer

Resolve placeholders in @ConfigurationProperties prefix

parent 79aa6e77
...@@ -289,6 +289,7 @@ public class ConfigurationPropertiesBindingPostProcessor implements BeanPostProc ...@@ -289,6 +289,7 @@ public class ConfigurationPropertiesBindingPostProcessor implements BeanPostProc
String targetName = (StringUtils.hasLength(annotation.value()) ? annotation String targetName = (StringUtils.hasLength(annotation.value()) ? annotation
.value() : annotation.prefix()); .value() : annotation.prefix());
if (StringUtils.hasLength(targetName)) { if (StringUtils.hasLength(targetName)) {
targetName = this.environment.resolvePlaceholders(targetName);
factory.setTargetName(targetName); factory.setTargetName(targetName);
} }
} }
......
...@@ -148,6 +148,16 @@ public class ConfigurationPropertiesBindingPostProcessorTests { ...@@ -148,6 +148,16 @@ public class ConfigurationPropertiesBindingPostProcessorTests {
equalTo("foo")); equalTo("foo"));
} }
@Test
public void placeholderInPrefix() throws Exception {
this.context = new AnnotationConfigApplicationContext();
EnvironmentTestUtils.addEnvironment(this.context, "foo:spam", "spam.foo:bar");
this.context.register(PlaceholderPrefixConfiguration.class);
this.context.refresh();
assertThat(this.context.getBean(PlaceholderPrefixConfiguration.class).getFoo(),
equalTo("bar"));
}
@Test @Test
public void placeholderResolutionWithCustomLocation() throws Exception { public void placeholderResolutionWithCustomLocation() throws Exception {
this.context = new AnnotationConfigApplicationContext(); this.context = new AnnotationConfigApplicationContext();
...@@ -373,6 +383,22 @@ public class ConfigurationPropertiesBindingPostProcessorTests { ...@@ -373,6 +383,22 @@ public class ConfigurationPropertiesBindingPostProcessorTests {
} }
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "${foo:bar}")
public static class PlaceholderPrefixConfiguration {
private String foo;
public String getFoo() {
return this.foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
}
@EnableConfigurationProperties @EnableConfigurationProperties
@ConfigurationProperties(locations = "custom-location.yml") @ConfigurationProperties(locations = "custom-location.yml")
public static class CustomConfigurationLocation { public static class CustomConfigurationLocation {
......
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