Spring Boot 应用启动时,控制台顶部默认打印的ASCII 艺术字符画 / 文本横幅,就是 Banner。
核心作用:个性化标识应用、展示版本信息、启动状态可视化;
默认来源:Spring Boot 内置的固定字符画 + 框架版本号;
支持格式:Spring Boot 3.x 仅支持文本文件(.txt),Spring Boot 2.x 额外支持图片转字符画。
Spring Boot 启动时会自动扫描以下位置的 Banner 文件(优先级从高到低):
配置文件指定的自定义路径
classpath 下的 banner.txt(文本)
Spring Boot 内置默认 Banner
如果未自定义,会直接打印框架自带的默认横幅。
无需任何代码配置,直接在项目 resources 根目录(classpath 根目录)新建文件:banner.txt,文件内容就是自定义的 Banner。
可在 banner.txt 中直接使用环境变量占位符,自动读取应用 / 框架配置,官方支持的变量如下:
实际生产中常需要关闭 Banner 减少控制台输出,三种常用方式:
spring:
main:
banner-mode: off # 可选值:off(关闭)、console(控制台)、log(日志文件)@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(DemoApplication.class);
// 关闭 Banner
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
}将 Spring Boot 启动日志级别设为 OFF,间接隐藏 Banner。
除了文件配置,还可以实现 Banner 接口,通过代码动态生成 Banner,适合需要动态逻辑的场景。
自定义 Banner 类:
import org.springframework.boot.Banner;
import org.springframework.boot.ansi.AnsiColor;
import org.springframework.boot.ansi.AnsiOutput;
import org.springframework.core.env.Environment;
import java.io.PrintStream;
public class MyCustomBanner implements Banner {
@Override
public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
// 彩色输出
AnsiOutput.setEnabled(AnsiOutput.Enabled.ALWAYS);
out.println(AnsiColor.BRIGHT_GREEN + "========================");
out.println(AnsiColor.BRIGHT_BLUE + " 自定义动态 Banner");
out.println(AnsiColor.BRIGHT_GREEN + "========================");
}
}启动类注册:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(DemoApplication.class);
// 注册自定义 Banner
app.setBanner(new MyCustomBanner());
app.run(args);
}
}若 banner.txt 出现中文乱码,两步解决:
IDE 设置文件编码:Settings -> Editor -> File Encodings,将 Properties Files 编码设为 UTF-8;
配置文件指定编码:
spring:
banner:
charset: UTF-8无需手动敲字符画,一键生成专业 ASCII 艺术字: