盘古BPM体验地址    盘古BPM交流群盘古BPM交流群号:963222735

spring boot Banner使用

分享牛 3675℃

摘要:

本文重点讲解spring boot中Banner的使用以及扩展。

在spring boot启动的时候,默认输出的Banner信息如下图所示:

 

区域一为日志信息。

区域2为Spring Boot标志

区域三为项目使用到的Spring Boot版本。

那我很好奇这些字符串可以修改吗?我们不妨首先看一下输出上图信息中的类在那个地方,那开始源码的跟踪。

SpringBootBanner类

SpringBootBanner类负责上图的图案生成逻辑代码如下:

class SpringBootBanner implements Banner {
private static final String[] BANNER = { "",
" . ____ _ __ _ _",
" /\\\\ / ___'_ __ _ _(_)_ __ __ _ \\ \\ \\ \\",
"( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\",
" \\\\/ ___)| |_)| | | | | || (_| | ) ) ) )",
" ' |____| .__|_| |_|_| |_\\__, | / / / /",
" =========|_|==============|___/=/_/_/_/" };
private static final String SPRING_BOOT = " :: Spring Boot :: ";
private static final int STRAP_LINE_SIZE = 42;
@Override
public void printBanner(Environment environment, Class<?> sourceClass,
PrintStream printStream) {
for (String line : BANNER) {
printStream.println(line);
}
String version = Banner.class.getPackage().getImplementationVersion();
version = (version == null ? "" : " (v" + version + ")");
String padding = "";
while (padding.length() < STRAP_LINE_SIZE
- (version.length() + SPRING_BOOT.length())) {
padding += " ";
}
printStream.println(AnsiOutput.toString(GREEN, SPRING_BOOT, DEFAULT, padding,
FAINT, version));
printStream.println();
}
}

 

BANNER 常量:内容对应上图中的区域一内容。

SPRING_BOOT常量:内容对应上图中的区域二内容。

Banner.class.getPackage().getImplementationVersion():对应上图中的区域二内容。

注意一点:

Banner.class.getPackage().getImplementationVersion()的定义位于spring-boot-1.3.0.M1.jar中的META-INF/MANIFEST.M文件中,对应的版本定义如下图所示:


关闭Banner

如果不打算使用上述的图案生成逻辑,则可以使用如下几种方式。

(1)直接修改main方法中的启动代码如下所示:

SpringApplication springApplication = new SpringApplication(Application.class);

    springApplication.setShowBanner(false);

    springApplication.run(args);

Application.class对应自己项目中的配置类。

(2)使用SpringApplicationBuilder方式启动

new SpringApplicationBuilder(Application.class).showBanner(false).run(args);

自定义Banner

1.在src/main/resources目录中新增banner.txt文件,文件的名称必须为banner.txt,否则不生效。

2.打开网站http://patorjk.com/software/taag/,输入自己想要的图片,比如shareniu,将新生成的字符串放置到banner.txt中。

3.启动程序,图案如下:


自定义Banner原理

打开SpringApplication类中的doRun方法入戏所示:

private boolean showBanner = true;
if (this.showBanner) {
printBanner(environment);
}
showBanner属性默认为true,换言之程序默认打印日志。
printBanner方法如下:
protected void printBanner(Environment environment) {
String location = environment.getProperty("banner.location", "banner.txt");
ResourceLoader resourceLoader = this.resourceLoader != null ? this.resourceLoader
: new DefaultResourceLoader(getClassLoader());
Resource resource = resourceLoader.getResource(location);
if (resource.exists()) {
new ResourceBanner(resource).printBanner(environment,
this.mainApplicationClass, System.out);
return;
}
if (this.banner != null) {
this.banner.printBanner(environment, this.mainApplicationClass, System.out);
return;
}
printDefaultBanner();
}

通过上面的代码可以知道用户自定义的Banner名称必须是banner.txt,除非自定义一个类继承SpringApplication类,并重写printBanner方法。这个我们后面的章节详细讲解。

转载请注明:分享牛 » spring boot Banner使用