From 3515ec1f295bae551041b7ec85281471080e8bde Mon Sep 17 00:00:00 2001 From: Madhura Bhave Date: Tue, 13 Aug 2019 14:49:20 -0700 Subject: [PATCH] Support relaxed binding for properties before environment is prepared Fixes gh-17843 --- .../java/org/springframework/boot/SpringApplication.java | 1 + .../org/springframework/boot/SpringApplicationTests.java | 8 ++++++++ .../src/test/resources/custom-config/application.yml | 1 + 3 files changed, 10 insertions(+) create mode 100644 spring-boot-project/spring-boot/src/test/resources/custom-config/application.yml diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java index 801259e51bc..dd5d10c2a75 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java @@ -338,6 +338,7 @@ public class SpringApplication { // Create and configure the environment ConfigurableEnvironment environment = getOrCreateEnvironment(); configureEnvironment(environment, applicationArguments.getSourceArgs()); + ConfigurationPropertySources.attach(environment); listeners.environmentPrepared(environment); bindToSpringApplication(environment); if (!this.isCustomEnvironment) { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java index 956c409d074..87cc68069d0 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java @@ -1072,6 +1072,14 @@ public class SpringApplicationTests { .getBean("someBean")).isEqualTo("override"); } + @Test + public void relaxedBindingShouldWorkBeforeEnvironmentIsPrepared() { + SpringApplication application = new SpringApplication(ExampleConfig.class); + application.setWebApplicationType(WebApplicationType.NONE); + this.context = application.run("--spring.config.additionalLocation=classpath:custom-config/"); + assertThat(this.context.getEnvironment().getProperty("hello")).isEqualTo("world"); + } + private Condition matchingPropertySource(final Class propertySourceClass, final String name) { return new Condition("has property source") { diff --git a/spring-boot-project/spring-boot/src/test/resources/custom-config/application.yml b/spring-boot-project/spring-boot/src/test/resources/custom-config/application.yml new file mode 100644 index 00000000000..bb56b055142 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/resources/custom-config/application.yml @@ -0,0 +1 @@ +hello: world