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:
- *
+ *
*
* - Create an appropriate {@link ApplicationContext} instance (depending on your
* classpath)
- *
+ *
* - Register a {@link CommandLinePropertySource} to expose command line arguments as
* Spring properties
- *
+ *
* - Refresh the application context, loading all singleton beans
- *
+ *
* - Trigger any {@link CommandLineRunner} beans
*
- *
+ *
* 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:
- *
+ *
*
*
* - {@link Class} - A Java class to be loaded by {@link AnnotatedBeanDefinitionReader}
- *
+ *
* - {@link Resource} - An XML resource to be loaded by {@link XmlBeanDefinitionReader},
* or a groovy script to be loaded by {@link GroovyBeanDefinitionReader}
- *
+ *
* - {@link Package} - A Java package to be scanned by
* {@link ClassPathBeanDefinitionScanner}
- *
+ *
* - {@link CharSequence} - A class name, resource handle or package name to loaded as
* appropriate. If the {@link CharSequence} cannot be resolved to class and does not
* resolve to a {@link Resource} that exists it will be considered a {@link Package}.
*
- *
+ *
* @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