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 d0110ffca3a..b96ca17a9cc 100644 --- a/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java +++ b/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java @@ -77,38 +77,38 @@ import org.springframework.web.context.support.StandardServletEnvironment; * Classes that can be used to bootstrap and launch a Spring application from a Java main * method. By default class will perform the following steps to bootstrap your * application: - * + * * - * + * * In most circumstances the static {@link #run(Object, String[])} method can be called * directly from your {@literal main} method to bootstrap your application: - * + * *
  * @Configuration
  * @EnableAutoConfiguration
  * public class MyApplication  {
- *
+ * 
  * // ... Bean definitions
- *
+ * 
  * public static void main(String[] args) throws Exception {
  *   SpringApplication.run(MyApplication.class, args);
  * }
  * 
- * + * *

* For more advanced configuration a {@link SpringApplication} instance can be created and * customized before being run: - * + * *

  * public static void main(String[] args) throws Exception {
  *   SpringApplication app = new SpringApplication(MyApplication.class);
@@ -116,29 +116,30 @@ import org.springframework.web.context.support.StandardServletEnvironment;
  *   app.run(args)
  * }
  * 
- * + * * {@link SpringApplication}s can read beans from a variety of different sources. It is * generally recommended that a single {@code @Configuration} class is used to bootstrap * your application, however, any of the following sources can also be used: - * + * *

*

- * + * * @author Phillip Webb * @author Dave Syer * @author Andy Wilkinson + * @author Christian Dupuis * @see #run(Object, String[]) * @see #run(Object[], String[]) * @see #SpringApplication(Object...) @@ -152,7 +153,7 @@ public class SpringApplication { + "boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext"; private static final String[] WEB_ENVIRONMENT_CLASSES = { "javax.servlet.Servlet", - "org.springframework.web.context.ConfigurableWebApplicationContext" }; + "org.springframework.web.context.ConfigurableWebApplicationContext" }; private static final String SYSTEM_PROPERTY_JAVA_AWT_HEADLESS = "java.awt.headless"; @@ -478,10 +479,11 @@ public class SpringApplication { Resource resource = resourceLoader.getResource(location); if (resource.exists()) { try { - System.out.println(StreamUtils.copyToString( + String banner = StreamUtils.copyToString( resource.getInputStream(), environment.getProperty("banner.charset", Charset.class, - Charset.forName("UTF-8")))); + Charset.forName("UTF-8"))); + System.out.println(environment.resolvePlaceholders(banner)); return; } catch (Exception ex) { @@ -546,7 +548,7 @@ public class SpringApplication { if (this.resourceLoader != null) { if (context instanceof GenericApplicationContext) { ((GenericApplicationContext) context) - .setResourceLoader(this.resourceLoader); + .setResourceLoader(this.resourceLoader); } if (context instanceof DefaultResourceLoader) { ((DefaultResourceLoader) context).setClassLoader(this.resourceLoader @@ -579,7 +581,7 @@ public class SpringApplication { protected void logStartupInfo(boolean isRoot) { if (isRoot) { new StartupInfoLogger(this.mainApplicationClass) - .logStarting(getApplicationLog()); + .logStarting(getApplicationLog()); } } diff --git a/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java b/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java index 445c448226c..d2ab69fc9b9 100644 --- a/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/SpringApplicationTests.java @@ -79,10 +79,11 @@ import static org.mockito.Mockito.verify; /** * Tests for {@link SpringApplication}. - * + * * @author Phillip Webb * @author Dave Syer * @author Andy Wilkinson + * @author Christian Dupuis */ public class SpringApplicationTests { @@ -162,6 +163,15 @@ public class SpringApplicationTests { verify(application, never()).printBanner(); } + @Test + public void customBannerWithProperties() throws Exception { + SpringApplication application = spy(new SpringApplication(ExampleConfig.class)); + application.setWebEnvironment(false); + application.run("--banner.location=classpath:test-banner-with-placeholder.txt", + "--test.property=123456"); + verify(application, never()).printBanner(); + } + @Test public void customId() throws Exception { SpringApplication application = new SpringApplication(ExampleConfig.class); diff --git a/spring-boot/src/test/resources/test-banner-with-placeholder.txt b/spring-boot/src/test/resources/test-banner-with-placeholder.txt new file mode 100644 index 00000000000..96a027ca9fc --- /dev/null +++ b/spring-boot/src/test/resources/test-banner-with-placeholder.txt @@ -0,0 +1,3 @@ +Running a Test! + +${test.property} \ No newline at end of file