banner(/ˈbænər/) 意思为“横幅、标语”。横幅是 Spring Boot 应用的特色,它在应用每次启动时在控制台打印出一个字符图案,可以显示应用名称、简称以及版本信息。例如:

推荐一个字符图生成网站:http://patorjk.com/software/taag/
通过在 classpath 下添加一个 banner.txt 或在 application.properties / application.yml 配置中设置 banner.location 来指定相应的 banner 文件可以改变启动过程中打印的 banner。如果这个文件有特殊的编码,你可以使用 banner.encoding 设置它(默认为 UTF-8)。除了文本文件,你也可以添加一个 banner.gif ,banner.jpg 或 banner.png 图片,或设置 banner.image.location 属性。图片会转换为字符画(ASCII art)形式,并在所有文本 banner 上方显示。
在 banner.txt 中可以使用如下占位符:
${application.version}:MANIFEST.MF 中声明的应用版本号,例如:Implementation-Version: 1.0 会打印 1.0
${application.formatted-version}:MANIFEST.MF 中声明的被格式化后的应用版本号(被括号包裹且以 v 作为前缀),用于显示,例如:( v1.0 )
${spring-boot.version}:当前Spring Boot的版本号,例如:1.4.1.RELEASE
${spring-boot.formatted-version}:当前 Spring Boot 被格式化后的版本号(被括号包裹且以v作为前缀), 用于显示,例如:(v1.4.1.RELEASE)
${Ansi.NAME} (或 ${AnsiColor.NAME}, ${AnsiBackground.NAME}, ${AnsiStyle.NAME}):NAME 代表一种 ANSI 编码,具体详情查看 AnsiPropertySource
${application.title}:MANIFEST.MF 中声明的应用 title,例如:Implementation-Title: MyApp 会打印 MyApp
注意:
如果想以编程的方式产生一个 banner,可以使用 SpringBootApplication.setBanner(…) 方法,并实现 org.springframework.boot.Banner 接口的 printBanner() 方法。你也可以使用spring.main.banner-mode 属性决定将 banner 打印到何处:
Banner.Mode.OFF:禁止 banner 打印
Banner.Mode.CONSOLE:将 banner 打印到 System.out,即控制台
Banner.Mode.LOG:将 banner 打印到日志文件
用于以编程方式编写 banner 的接口类,该接口仅仅只有一个 printBanner(Environment environment, Class<?> sourceClass, PrintStream out) 方法,用于将 banner 打印到指定的流。其中参数:
environment:Spring Environment 对象,可以从该对象中获取属性值
sourceClass:应用程序的 Class 对象
out:输出打印流
Spring Boot 提供了一下几个 Banner 接口的默认实现:
ImageBanner:该类将图片转换为字符画(ASCII art),然后打印到指定的输出流
SpringBootBanner:该类是 Spring Boot 提供的默认 Banner,当你没有配置任何 Banner 的时候将会执行该类,该类将在控制台输出“Spring Boot”字符串
ResourceBanner:该类实现从 Text 文件读取 Banner 字符串,然后将该字符串打印到输出流
如果你需要自定义 Banner,需要实现 Banner 接口,重写 printBanner() 方法。如下:
import org.springframework.boot.Banner;
import org.springframework.core.env.Environment;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 自定义自己的 Banner
*/
public class MyBanner implements Banner {
private static final String[] BANNER = {
" _ ___ __ _____ _______ _____ _______ ________",
" | | | \\ \\ / // ____|__ __| __ \\|_ _\\ \\ / / ____|",
" | |__| |\\ V /| (___ | | | |__) | | | \\ \\ / /| |__",
" | __ | > < \\___ \\ | | | _ / | | \\ \\/ / | __|",
" | | | |/ . \\ ____) | | | | | \\ \\ _| |_ \\ / | |____",
" |_| |_/_/ \\_\\_____/ |_| |_| \\_\\_____| \\/ |______|"
};
@Override
public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
for(String line : BANNER) {
out.println(line);
}
// 当前时间
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
out.println("当前时间:" + dateFormat.format(new Date()));
out.println("当前JDK版本:" + System.getProperty("java.version"));
out.flush();
}
}实现好自己的 Banner 类后,还需要将它设置到 Spring Boot,如下:
import org.springframework.boot.Banner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@SpringBootApplication
public class SpringbootBannerDemo4Application {
public static void main(String[] args) {
new SpringApplicationBuilder(SpringbootBannerDemo4Application.class)
.banner(new MyBanner())
.bannerMode(Banner.Mode.CONSOLE).run(args);
}
}