有道无术,术尚可求,有术无道,止于术。
本系列Spring Boot版本2.7.0
Spring Boot 程序在启动时,默认在控制台会打印一个Banner 图,内容为一个Spring LOGO和Spring Boot 版本号。

可以在启动类中设置Banner 模式为关闭状态,这样就不会打印了。
@SpringBootApplication
public class App1 {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(App1.class);
springApplication.setBannerMode(Banner.Mode.OFF); // 关闭Banner
springApplication.run(args);
}
}
先在resources目录下加入一张图片:

然后在application.yml中配置Banner 图片的位置:
spring:
banner:
image:
location: classpath:banner.jpg
点击启动,可以看到将图片转为了ASCII 码进行了打印输出,可爱的哆啦A梦,变成了一个丑八怪,所以一般也不会采用这种方式。。。

可以像Spring Boot 默认打印的Banner 一样,可以使用文字制作Banner , 并打印相关属性。
比如:我们公司的英文名称为PEARL,首先我们可以在一些设计网站中设计:
输入PEARL,可以看到生成了对应的 ASCII 码Banner 图。

将其复制到resources/banner.txt文件中,就可以了:

可以通过以下配置路径和字符集:
spring:
banner:
location: banner.txt
charset: UTF-8
在banner.txt文件中,还可以通过占位符获取环境属性:
| 占位符 | 描述 |
|---|---|
| ${application.version} | 应用程序的版本号,如MANIFEST.MF文件中Implementation-Version: 1.0,打印为1.0. |
| ${application.formatted-version} | 应用程序MANIFEST文件的版本号,用括号括起来并以v为前缀),例如(v1.0) |
| ${spring-boot.version} | Spring Boot 版本。例如2.7.1. |
| ${spring-boot.formatted-version} | Spring Boot 版本。例如V2.7.1 |
| ${application.title} | 应用程序的标题,如MANIFEST.MF文件中 Implementation-Title: MyApp,打印为MyApp. |
| ANSI样色/样式等 | ${Ansi.NAME} (or ${AnsiColor.NAME}, ${AnsiBackground.NAME}, ${AnsiStyle.NAME}) |
和MANIFEST.MF文件相关的属性需要打包成jar 运行才会有,所以这里没有显示出来,如下所示:

还支持通过代码的方式生成Banner,Spring Boot 提供了 一个功能接口:
@FunctionalInterface
public interface Banner {
void printBanner(Environment environment, Class<?> sourceClass, PrintStream out);
static enum Mode {
OFF, CONSOLE, LOG;
private Mode() { /* compiled code */ }
}
}
默认打印的Banner就是通过这个接口来打印的,我们也可以自定自己的实现类。
public class MyBanner implements Banner {
private static final String BANNER = "MyBanner";
@Override
public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
out.println(BANNER);
out.println();
}
}
在启动的时候设置 Banner为自定义实现类。
@SpringBootApplication
public class App1 {
public static void main(String[] args) {
SpringApplication springApplication =new SpringApplication(App1.class);
springApplication.setBanner(new MyBanner());
springApplication.run(args);
}
}

一般还是需要将默认的 Banner图改成自己公司,不改也没啥影响。
方式的话,建议直接生成一个banner.txt放在资源目录下即可。