From a082f2bed52e57236369dd12e60ae6c3f408df74 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Sun, 6 Oct 2013 22:03:08 -0400 Subject: [PATCH] Investigating --- .../builder/SpringApplicationBuilder.java | 23 +++++++++++++------ ...nfigFileApplicationContextInitializer.java | 6 ++--- .../boot/SpringApplicationBuilderTests.java | 17 ++++++++++++++ .../resources/application-node.properties | 1 + .../src/test/resources/logback-test.xml | 1 + 5 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 spring-boot/src/test/resources/application-node.properties diff --git a/spring-boot/src/main/java/org/springframework/boot/builder/SpringApplicationBuilder.java b/spring-boot/src/main/java/org/springframework/boot/builder/SpringApplicationBuilder.java index 34ca7a4a2af..a010cc64d67 100644 --- a/spring-boot/src/main/java/org/springframework/boot/builder/SpringApplicationBuilder.java +++ b/spring-boot/src/main/java/org/springframework/boot/builder/SpringApplicationBuilder.java @@ -99,7 +99,7 @@ public class SpringApplicationBuilder { if (this.parent != null) { // If there is a parent initialize it and make sure it is added to the current // context - addInitializers(new ParentContextApplicationContextInitializer( + addInitializers(true, new ParentContextApplicationContextInitializer( this.parent.run(args))); } @@ -111,6 +111,8 @@ public class SpringApplicationBuilder { if (this.running.compareAndSet(false, true)) { synchronized (this.running) { // If not already running copy the sources over and then run. + // this.application.setDefaultArgs(this.defaultArgs + // .toArray(new String[this.defaultArgs.size()])); this.application.setSources(this.sources); this.context = this.application.run(args); } @@ -190,7 +192,7 @@ public class SpringApplicationBuilder { this.parent = new SpringApplicationBuilder(); this.parent.context = parent; this.parent.running.set(true); - addInitializers(new ParentContextApplicationContextInitializer(parent)); + addInitializers(true, new ParentContextApplicationContextInitializer(parent)); return this; } @@ -394,17 +396,24 @@ public class SpringApplicationBuilder { */ public SpringApplicationBuilder initializers( ApplicationContextInitializer... initializers) { - addInitializers(initializers); + addInitializers(false, initializers); return this; } /** * @param initializers the initializers to add */ - private void addInitializers(ApplicationContextInitializer... initializers) { - Set> target = new LinkedHashSet>( - this.application.getInitializers()); - target.addAll(Arrays.asList(initializers)); + private void addInitializers(boolean prepend, + ApplicationContextInitializer... initializers) { + Set> target = new LinkedHashSet>(); + if (prepend) { + target.addAll(Arrays.asList(initializers)); + target.addAll(this.application.getInitializers()); + } + else { + target.addAll(this.application.getInitializers()); + target.addAll(Arrays.asList(initializers)); + } this.application.setInitializers(target); } diff --git a/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java b/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java index 0e59ada60e7..5afeb8aad0d 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/initializer/ConfigFileApplicationContextInitializer.java @@ -171,7 +171,7 @@ public class ConfigFileApplicationContextInitializer implements } Resource resource = resourceLoader.getResource(location); - PropertySource propertySource = getPropertySource(resource, loaders); + PropertySource propertySource = getPropertySource(resource, profile, loaders); if (propertySource == null) { return; } @@ -187,9 +187,9 @@ public class ConfigFileApplicationContextInitializer implements environment.getPropertySources().addLast(propertySource); } - private PropertySource getPropertySource(Resource resource, + private PropertySource getPropertySource(Resource resource, String profile, List loaders) { - String key = resource.getDescription(); + String key = resource.getDescription() + (profile == null ? "" : "#" + profile); if (this.cached.containsKey(key)) { return this.cached.get(key); } diff --git a/spring-boot/src/test/java/org/springframework/boot/SpringApplicationBuilderTests.java b/spring-boot/src/test/java/org/springframework/boot/SpringApplicationBuilderTests.java index dfd5fc07f16..37287eb140c 100644 --- a/spring-boot/src/test/java/org/springframework/boot/SpringApplicationBuilderTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/SpringApplicationBuilderTests.java @@ -87,6 +87,23 @@ public class SpringApplicationBuilderTests { any(ApplicationContext.class)); } + @Test + public void parentFirstCreationWithProfileAndDefaultArgs() throws Exception { + SpringApplicationBuilder application = new SpringApplicationBuilder( + ExampleConfig.class).profiles("node").defaultArgs("--transport=redis") + .child(ChildConfig.class).web(false); + this.context = application.run(); + assertThat(this.context.getEnvironment().acceptsProfiles("node"), is(true)); + assertThat(this.context.getEnvironment().getProperty("transport"), + is(equalTo("redis"))); + assertThat(this.context.getParent().getEnvironment().acceptsProfiles("node"), + is(true)); + assertThat(this.context.getParent().getEnvironment().getProperty("transport"), + is(equalTo("redis"))); + // only defined in node profile + assertThat(this.context.getEnvironment().getProperty("bar"), is(equalTo("spam"))); + } + @Test public void parentContextIdentical() throws Exception { SpringApplicationBuilder application = new SpringApplicationBuilder( diff --git a/spring-boot/src/test/resources/application-node.properties b/spring-boot/src/test/resources/application-node.properties new file mode 100644 index 00000000000..15b07370c0c --- /dev/null +++ b/spring-boot/src/test/resources/application-node.properties @@ -0,0 +1 @@ +bar: spam \ No newline at end of file diff --git a/spring-boot/src/test/resources/logback-test.xml b/spring-boot/src/test/resources/logback-test.xml index a72f5b59b58..85ea91eb538 100644 --- a/spring-boot/src/test/resources/logback-test.xml +++ b/spring-boot/src/test/resources/logback-test.xml @@ -8,6 +8,7 @@ +