Browse Source

Fix properties binding to SpringApplication

Fix ConfigFileApplicationListener to correctly bind
`application.properties` to SpringApplication. Binding in RC2 failed
due to the fact that `ConfigurationPropertySources` did not extend
`EnumerablePropertySource`.

Fixes gh-346
pull/352/merge
Phillip Webb 12 years ago
parent
commit
97c258a2b4
  1. 21
      spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java
  2. 14
      spring-boot/src/test/java/org/springframework/boot/context/config/ConfigFileApplicationListenerTests.java
  3. 1
      spring-boot/src/test/resources/bindtoapplication.properties

21
spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java

@ -44,6 +44,7 @@ import org.springframework.core.Ordered; @@ -44,6 +44,7 @@ import org.springframework.core.Ordered;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.EnumerablePropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertySource;
@ -386,15 +387,26 @@ public class ConfigFileApplicationListener implements @@ -386,15 +387,26 @@ public class ConfigFileApplicationListener implements
* Holds the configuration {@link PropertySource}s as they are loaded can relocate
* them once configuration classes have been processed.
*/
static class ConfigurationPropertySources extends PropertySource<Object> {
static class ConfigurationPropertySources extends
EnumerablePropertySource<Collection<PropertySource<?>>> {
private static final String NAME = "applicationConfigurationProperties";
private final Collection<PropertySource<?>> sources;
private final String[] names;
public ConfigurationPropertySources(Collection<PropertySource<?>> sources) {
super(NAME);
super(NAME, sources);
this.sources = sources;
List<String> names = new ArrayList<String>();
for (PropertySource<?> source : sources) {
if (source instanceof EnumerablePropertySource) {
names.addAll(Arrays.asList(((EnumerablePropertySource<?>) source)
.getPropertyNames()));
}
}
this.names = names.toArray(new String[names.size()]);
}
@Override
@ -418,6 +430,11 @@ public class ConfigFileApplicationListener implements @@ -418,6 +430,11 @@ public class ConfigFileApplicationListener implements
}
}
@Override
public String[] getPropertyNames() {
return this.names;
}
}
}

14
spring-boot/src/test/java/org/springframework/boot/context/config/ConfigFileApplicationListenerTests.java

@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
package org.springframework.boot.context.config;
import java.lang.reflect.Field;
import java.util.Arrays;
import org.hamcrest.Description;
@ -26,7 +27,6 @@ import org.junit.Rule; @@ -26,7 +27,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.config.ConfigFileApplicationListener;
import org.springframework.boot.context.config.ConfigFileApplicationListener.ConfigurationPropertySources;
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.boot.test.EnvironmentTestUtils;
@ -38,6 +38,7 @@ import org.springframework.core.env.ConfigurableEnvironment; @@ -38,6 +38,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.SimpleCommandLinePropertySource;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.util.ReflectionUtils;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.equalTo;
@ -352,6 +353,17 @@ public class ConfigFileApplicationListenerTests { @@ -352,6 +353,17 @@ public class ConfigFileApplicationListenerTests {
assertThat(property, equalTo("baz"));
}
@Test
public void bindsToSpringApplication() throws Exception {
// gh-346
this.initializer.setSearchNames("bindtoapplication");
this.initializer.onApplicationEvent(this.event);
SpringApplication application = this.event.getSpringApplication();
Field field = ReflectionUtils.findField(SpringApplication.class, "showBanner");
field.setAccessible(true);
assertThat((Boolean) field.get(application), equalTo(false));
}
private static Matcher<? super ConfigurableEnvironment> containsProperySource(
final String sourceName) {
return new TypeSafeDiagnosingMatcher<ConfigurableEnvironment>() {

1
spring-boot/src/test/resources/bindtoapplication.properties

@ -0,0 +1 @@ @@ -0,0 +1 @@
spring.main.show_banner=false
Loading…
Cancel
Save