From 62a2dd659becdab59befea0294db94ad34496240 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Tue, 21 Apr 2015 11:27:39 +0200 Subject: [PATCH] Add display-name option Allow the display-name of the application to be customized when deployed in an embedded container via the `server.display-name` property. Closes gh-2600 --- .../autoconfigure/web/ServerProperties.java | 16 +++++++++++ .../web/ServerPropertiesTests.java | 27 +++++++++++++++++++ .../appendix-application-properties.adoc | 1 + ...tConfigurableEmbeddedServletContainer.java | 12 +++++++++ .../ConfigurableEmbeddedServletContainer.java | 7 +++++ .../JettyEmbeddedServletContainerFactory.java | 1 + ...TomcatEmbeddedServletContainerFactory.java | 1 + ...dertowEmbeddedServletContainerFactory.java | 1 + 8 files changed, 66 insertions(+) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java index 419a49c36c6..031c5071e9e 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java @@ -80,6 +80,11 @@ public class ServerProperties implements EmbeddedServletContainerCustomizer, Ord */ private String contextPath; + /** + * Display name of the application. + */ + private String displayName = "application"; + @NestedConfigurationProperty private Ssl ssl; @@ -122,6 +127,14 @@ public class ServerProperties implements EmbeddedServletContainerCustomizer, Ord this.contextPath = contextPath; } + public String getDisplayName() { + return this.displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + public String getServletPath() { return this.servletPath; } @@ -213,6 +226,9 @@ public class ServerProperties implements EmbeddedServletContainerCustomizer, Ord if (getContextPath() != null) { container.setContextPath(getContextPath()); } + if (getDisplayName() != null) { + container.setDisplayName(getDisplayName()); + } if (getSessionTimeout() != null) { container.setSessionTimeout(getSessionTimeout()); } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java index 016965c72b4..41c00af5e9e 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java @@ -112,6 +112,21 @@ public class ServerPropertiesTests { verify(factory, never()).setContextPath(""); } + @Test + public void testDefaultDisplayName() throws Exception { + ConfigurableEmbeddedServletContainer factory = mock(ConfigurableEmbeddedServletContainer.class); + this.properties.customize(factory); + verify(factory).setDisplayName("application"); + } + + @Test + public void testCustomizeDisplayName() throws Exception { + ConfigurableEmbeddedServletContainer factory = mock(ConfigurableEmbeddedServletContainer.class); + this.properties.setDisplayName("TestName"); + this.properties.customize(factory); + verify(factory).setDisplayName("TestName"); + } + @Test public void testCustomizeTomcatPort() throws Exception { ConfigurableEmbeddedServletContainer factory = mock(ConfigurableEmbeddedServletContainer.class); @@ -136,6 +151,18 @@ public class ServerPropertiesTests { assertEquals(9999, this.properties.getTomcat().getMaxHttpHeaderSize()); } + @Test + public void customizeTomcatDisplayName() throws Exception { + Map map = new HashMap(); + map.put("server.display-name", "MyBootApp"); + bindProperties(map); + + TomcatEmbeddedServletContainerFactory container = new TomcatEmbeddedServletContainerFactory(); + this.properties.customize(container); + + assertEquals("MyBootApp", container.getDisplayName()); + } + @Test public void disableTomcatRemoteIpValve() throws Exception { Map map = new HashMap(); diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index e5fb04299a2..3ca7ee21d49 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -61,6 +61,7 @@ content into your application; rather pick only the properties that you need. server.jsp-servlet.init-parameters.*= # Init parameters used to configure the JSP servlet server.jsp-servlet.registered=true # Whether or not the JSP servlet is registered server.servlet-path= # the servlet path, defaults to '/' + server.display-name= # the display name of the application server.ssl.enabled=true # if SSL support is enabled server.ssl.client-auth= # want or need server.ssl.key-alias= diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractConfigurableEmbeddedServletContainer.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractConfigurableEmbeddedServletContainer.java index 702098db17c..dfe985fc711 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractConfigurableEmbeddedServletContainer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractConfigurableEmbeddedServletContainer.java @@ -34,6 +34,7 @@ import org.springframework.util.ClassUtils; * @author Phillip Webb * @author Dave Syer * @author Andy Wilkinson + * @author Stephane Nicoll * @see AbstractEmbeddedServletContainerFactory */ public abstract class AbstractConfigurableEmbeddedServletContainer implements @@ -44,6 +45,8 @@ public abstract class AbstractConfigurableEmbeddedServletContainer implements private String contextPath = ""; + private String displayName; + private boolean registerDefaultServlet = true; private int port = 8080; @@ -120,6 +123,15 @@ public abstract class AbstractConfigurableEmbeddedServletContainer implements return this.contextPath; } + @Override + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDisplayName() { + return this.displayName; + } + @Override public void setPort(int port) { this.port = port; diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/ConfigurableEmbeddedServletContainer.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/ConfigurableEmbeddedServletContainer.java index 5b5f7d9187b..3a158aab48d 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/ConfigurableEmbeddedServletContainer.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/ConfigurableEmbeddedServletContainer.java @@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit; * * @author Dave Syer * @author Andy Wilkinson + * @author Stephane Nicoll * @see EmbeddedServletContainerFactory * @see EmbeddedServletContainerCustomizer */ @@ -41,6 +42,12 @@ public interface ConfigurableEmbeddedServletContainer { */ void setContextPath(String contextPath); + /** + * Sets the display name of the application deployed in the embedded servlet container. + * @param displayName the displayName to set + */ + void setDisplayName(String displayName); + /** * Sets the port that the embedded servlet container should listen on. If not * specified port '8080' will be used. Use port -1 to disable auto-start (i.e start diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactory.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactory.java index 498bb5f387d..a7bf274f0a3 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactory.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactory.java @@ -231,6 +231,7 @@ public class JettyEmbeddedServletContainerFactory extends } String contextPath = getContextPath(); context.setContextPath(StringUtils.hasLength(contextPath) ? contextPath : "/"); + context.setDisplayName(getDisplayName()); configureDocumentRoot(context); if (isRegisterDefaultServlet()) { addDefaultServlet(context); diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java index 9288b4e1d4b..fbbfbaed6e9 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java @@ -161,6 +161,7 @@ public class TomcatEmbeddedServletContainerFactory extends docBase = (docBase != null ? docBase : createTempDir("tomcat-docbase")); TomcatEmbeddedContext context = new TomcatEmbeddedContext(); context.setName(getContextPath()); + context.setDisplayName(getDisplayName()); context.setPath(getContextPath()); context.setDocBase(docBase.getAbsolutePath()); context.addLifecycleListener(new FixContextListener()); diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/undertow/UndertowEmbeddedServletContainerFactory.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/undertow/UndertowEmbeddedServletContainerFactory.java index 46d3484225e..cc578e9f0d3 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/undertow/UndertowEmbeddedServletContainerFactory.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/undertow/UndertowEmbeddedServletContainerFactory.java @@ -325,6 +325,7 @@ public class UndertowEmbeddedServletContainerFactory extends initializers); deployment.setClassLoader(getServletClassLoader()); deployment.setContextPath(getContextPath()); + deployment.setDisplayName(getDisplayName()); deployment.setDeploymentName("spring-boot"); if (isRegisterDefaultServlet()) { deployment.addServlet(Servlets.servlet("default", DefaultServlet.class));