diff --git a/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java b/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java index 3a948af9ee..2645315ab3 100644 --- a/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java +++ b/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java @@ -54,6 +54,7 @@ import org.springframework.util.ClassUtils; import org.springframework.util.StopWatch; import org.springframework.util.StringUtils; import org.springframework.web.context.ConfigurableWebApplicationContext; +import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.StandardServletEnvironment; /** @@ -626,6 +627,9 @@ public class SpringApplication { public void setApplicationContextClass( Class applicationContextClass) { this.applicationContextClass = applicationContextClass; + if (!WebApplicationContext.class.isAssignableFrom(applicationContextClass)) { + this.webEnvironment = false; + } } /** 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 bdb5c8293e..34ca7a4a2a 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 @@ -61,7 +61,7 @@ public class SpringApplicationBuilder { private SpringApplicationBuilder parent; private AtomicBoolean running = new AtomicBoolean(false); private Set sources = new LinkedHashSet(); - private String[] defaultArgs; + private Set defaultArgs = new LinkedHashSet(); private ConfigurableEnvironment environment; public SpringApplicationBuilder(Object... sources) { @@ -320,8 +320,9 @@ public class SpringApplicationBuilder { * @return the current builder */ public SpringApplicationBuilder defaultArgs(String... defaultArgs) { - this.defaultArgs = defaultArgs; - this.application.setDefaultArgs(defaultArgs); + this.defaultArgs.addAll(Arrays.asList(defaultArgs)); + this.application.setDefaultArgs(this.defaultArgs + .toArray(new String[this.defaultArgs.size()])); if (this.parent != null) { this.parent.defaultArgs(defaultArgs); this.parent.environment(this.environment); @@ -329,6 +330,11 @@ public class SpringApplicationBuilder { return this; } + private SpringApplicationBuilder defaultArgs(Set defaultArgs) { + this.defaultArgs = defaultArgs; + return this; + } + /** * Set the active Spring profiles for this app (and its parent and children). * Synonymous with {@link #defaultArgs(String...) 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 1a885f30ff..dfd5fc07f1 100644 --- a/spring-boot/src/test/java/org/springframework/boot/SpringApplicationBuilderTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/SpringApplicationBuilderTests.java @@ -25,6 +25,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import org.springframework.context.annotation.Configuration; import org.springframework.context.support.StaticApplicationContext; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; @@ -46,6 +47,18 @@ public class SpringApplicationBuilderTests { } } + @Test + public void profileAndDefaultArgs() throws Exception { + SpringApplicationBuilder application = new SpringApplicationBuilder() + .sources(ExampleConfig.class) + .contextClass(StaticApplicationContext.class).profiles("foo") + .defaultArgs("--foo=bar"); + this.context = application.run(); + assertThat(this.context, is(instanceOf(StaticApplicationContext.class))); + assertThat(this.context.getEnvironment().getProperty("foo"), is(equalTo("bar"))); + assertThat(this.context.getEnvironment().acceptsProfiles("foo"), is(true)); + } + @Test public void specificApplicationContextClass() throws Exception { SpringApplicationBuilder application = new SpringApplicationBuilder().sources(