Commit e9c69aa4 authored by Andy Wilkinson's avatar Andy Wilkinson

Honour existing java.awt.headless configuration

Previously, SpringApplication would set the java.awt.headless system
property even if it had already been set. This commit updates
SpringApplication to honour any existing configuration when setting
the property.

Fixes #1189
parent 53be0f8d
......@@ -138,6 +138,7 @@ import org.springframework.web.context.support.StandardServletEnvironment;
*
* @author Phillip Webb
* @author Dave Syer
* @author Andy Wilkinson
* @see #run(Object, String[])
* @see #run(Object[], String[])
* @see #SpringApplication(Object...)
......@@ -153,6 +154,8 @@ public class SpringApplication {
private static final String[] WEB_ENVIRONMENT_CLASSES = { "javax.servlet.Servlet",
"org.springframework.web.context.ConfigurableWebApplicationContext" };
private static final String SYSTEM_PROPERTY_JAVA_AWT_HEADLESS = "java.awt.headless";
private final Log log = LogFactory.getLog(getClass());
private final Set<Object> sources = new LinkedHashSet<Object>();
......@@ -262,7 +265,10 @@ public class SpringApplication {
stopWatch.start();
ConfigurableApplicationContext context = null;
System.setProperty("java.awt.headless", Boolean.toString(this.headless));
System.setProperty(
SYSTEM_PROPERTY_JAVA_AWT_HEADLESS,
System.getProperty(SYSTEM_PROPERTY_JAVA_AWT_HEADLESS,
Boolean.toString(this.headless)));
Collection<SpringApplicationRunListener> runListeners = getRunListeners(args);
for (SpringApplicationRunListener runListener : runListeners) {
......
......@@ -23,6 +23,7 @@ import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
......@@ -81,9 +82,12 @@ import static org.mockito.Mockito.verify;
*
* @author Phillip Webb
* @author Dave Syer
* @author Andy Wilkinson
*/
public class SpringApplicationTests {
private String headlessProperty;
@Rule
public ExpectedException thrown = ExpectedException.none();
......@@ -96,6 +100,23 @@ public class SpringApplicationTests {
throw new IllegalStateException("Could not obtain Environment");
}
@Before
public void storeAndClearHeadlessProperty() {
this.headlessProperty = System.getProperty("java.awt.headless");
System.clearProperty("java.awt.headless");
}
@After
public void reinstateHeadlessProperty() {
if (this.headlessProperty == null) {
System.clearProperty("java.awt.headless");
}
else {
System.setProperty("java.awt.headless", this.headlessProperty);
}
}
@After
public void close() {
if (this.context != null) {
......@@ -504,6 +525,15 @@ public class SpringApplicationTests {
assertThat(System.getProperty("java.awt.headless"), equalTo("false"));
}
@Test
public void headlessSystemPropertyTakesPrecedence() throws Exception {
System.setProperty("java.awt.headless", "false");
TestSpringApplication application = new TestSpringApplication(ExampleConfig.class);
application.setWebEnvironment(false);
application.run();
assertThat(System.getProperty("java.awt.headless"), equalTo("false"));
}
private boolean hasPropertySource(ConfigurableEnvironment environment,
Class<?> propertySourceClass, String name) {
for (PropertySource<?> source : environment.getPropertySources()) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment