Refine SpringApplicationBuilder and add a test for profiles

This commit is contained in:
Dave Syer
2013-10-02 08:35:17 -04:00
parent 345c0fc5a4
commit eabb1e70a4
3 changed files with 26 additions and 3 deletions

View File

@@ -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<? extends ConfigurableApplicationContext> applicationContextClass) {
this.applicationContextClass = applicationContextClass;
if (!WebApplicationContext.class.isAssignableFrom(applicationContextClass)) {
this.webEnvironment = false;
}
}
/**

View File

@@ -61,7 +61,7 @@ public class SpringApplicationBuilder {
private SpringApplicationBuilder parent;
private AtomicBoolean running = new AtomicBoolean(false);
private Set<Object> sources = new LinkedHashSet<Object>();
private String[] defaultArgs;
private Set<String> defaultArgs = new LinkedHashSet<String>();
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<String> defaultArgs) {
this.defaultArgs = defaultArgs;
return this;
}
/**
* Set the active Spring profiles for this app (and its parent and children).
* Synonymous with {@link #defaultArgs(String...)

View File

@@ -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(