Skip to content

Spring Boot(三) 自定义Banner篇


在 Spring Boot 项目中,当应用启动时会显示默认的 Spring 标志和版本信息。定制化的启动 Banner 不仅可以美化应用,还能在项目中增加个性化的品牌印记,甚至可以提供一些关键信息。本文将介绍如何在 Spring Boot 项目中自定义启动 Banner,以及如何使用工具生成自定义文本和图像 Banner。

一、Spring Boot 默认 Banner

Spring Boot 默认的 Banner 位于 org/springframework/boot 包内的 spring-boot.jar 中。默认 Banner 只显示了 Spring 标志、版本和应用名称信息,效果如下:

image.png

二、自定义Banner配置方式

Spring Boot 支持三种方式来定制 Banner:

文本文件(ASCII Art):通过 banner.txt 文件设置 ASCII Art。 图片文件:通过 banner.jpg、banner.png 或 banner.gif 设置图片。 编程方式:通过编写 Java 代码自定义 Banner。

1. 文本 Banner 配置

resources 目录下创建 banner.txt 文件,Spring Boot 启动时会‌自动读取‌该文件内容作为 Banner 输出‌。

步骤一:在resources目录下创建文件banner.txt文件,文件内容为 ceshi banner

image.png

步骤二:启动项目,查看效果图

image.png

步骤三:美化自定义banner.txt

一般情况下,我们会借助第三方工具帮忙转化内容,如网站http://www.network-science.de/ascii/将文字转化成字符串,网站:http://www.degraeve.com/img2txt.php可以将图片转化成字符串。

image.png

复制上面的转换结果到banner.txt里,启动项目查看效果

image.png

  • 若需自定义文件名或路径,可通过配置 spring.banner.location=classpath:自定义路径/文件名 指定‌。
  • 支持 ANSI 转义码实现彩色输出,例如:${AnsiColor.BRIGHT_CYAN}‌。

2. 图片 Banner 配置

Spring Boot 支持使用图片作为 Banner。图片文件的格式可以是 PNG、GIF 或 JPG,系统会在启动时将图片渲染成 ASCII 格式。具体支持的图片格式为黑白图像。

步骤一:将 banner.png、banner.jpg 或 banner.gif 图片文件放在 src/main/resources 中。

banner.png

步骤二:启动项目,Spring Boot 会自动加载并显示图片的 ASCII 版本。

image.png

  • 支持 GIF/JPG 格式图片,通过配置 spring.banner.image.location=classpath:图片路径 指定‌。
  • 图片会被转换为 ASCII 字符输出,但需注意部分 IDE 控制台可能不支持显示‌。
  • 图片生成推荐工具 可以使用 Image to ASCII 这类工具生成黑白图片,将其导出为 PNG 或 JPG 格式,并命名为 banner.png。

3.通过编程方式自定义 Banner

如果希望在启动过程中动态设置 Banner,还可以通过 Java 代码实现。实现 Banner 接口来自定义 Banner,并将其注册到 Spring Boot 应用中。

创建一个实现 org.springframework.boot.Banner 接口的类:

java
package com.w3cjava.common.banner;

import org.springframework.boot.Banner;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import java.io.PrintStream;

@Component
public class CustomBanner implements Banner {
    @Override
    public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
        out.println("=================================");
        out.println("   Welcome to My Spring Boot App ");
        out.println("=================================");
    }
}

在 SpringApplication 中设置自定义 Banner:

java
@SpringBootApplication
public class SpringBootBannerApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(SpringBootBannerApplication.class);
        // 配置自定义的Banner类
        app.setBanner(new CustomBanner());
        app.run(args);
    }
}

效果:

image.png

  • 通过编码自定义banner时,需要将resources下的banner.txt文本形式和banner.png图片形式删除或者改名称

三、配置Banner样式

Spring Boot 允许在 application.properties 文件中设置 Banner 的显示位置和字体颜色。

1.设置 Banner 显示模式

可以通过 spring.main.banner-mode 属性来设置 Banner 的显示模式:

yaml
spring:
  main:
    banner-mode: console
  • console:在控制台打印 Banner(默认值)。
  • log:将 Banner 打印到日志文件。
  • off:禁用 Banner。

2.设置字体颜色

要为 Banner 设置颜色,可以通过 ANSI 转义代码自定义字体颜色。例如:

properties
${AnsiColor.RED}Welcome to My Spring Boot App${AnsiColor.DEFAULT}

将这段内容写入 banner.txt,即可在控制台中显示红色的文本。

效果:

image.png

常用颜色代码:

properties
${AnsiColor.BLACK}
${AnsiColor.RED}
${AnsiColor.GREEN}
${AnsiColor.YELLOW}
${AnsiColor.BLUE}
${AnsiColor.MAGENTA}
${AnsiColor.CYAN}
${AnsiColor.WHITE}

注意: ANSI 颜色在部分控制台中可能不支持。


四、动态内容注入

  1. 内置变量 Banner 内容支持通过 ${application.version}${spring-boot.version} 等占位符注入应用版本、Spring Boot 版本等动态信息‌。
  2. 自定义变量 可在 application.properties 中定义变量(如 custom.info=Demo),通过 ${custom.info} 在 Banner 中引用‌。

五、生成工具与优化

  1. 艺术字生成 推荐使用 patorjk.com/taag 等在线工具生成 ASCII 艺术字,直接粘贴至 banner.txt 实现个性化效果‌5
  2. 关闭 Banner 配置 spring.main.banner-mode=off 可完全禁用 Banner 输出‌。

六、加载优先级与源码逻辑

  1. 加载顺序 Spring Boot 优先检查 spring.banner.location 配置的路径,若未配置则默认加载 banner.txt;同时支持图片与文本 Banner 共存,但默认仅输出文本‌。
  2. 源码关键点 启动流程中通过 SpringApplicationBannerPrinter 类处理 Banner 打印逻辑,依次调用 ResourceBanner(文本)和 ImageBanner(图片)‌。

七、示例配置

yaml
spring:
  banner:
    location: classpath:banner/mycustom.txt
    image:
      location: classpath:images/logo.jpg
  main:
    banner-mode: console  # 可选值:console/log/off

八、总结

通过文本/图片配置、动态变量注入及工具生成,可快速实现个性化 Banner,兼顾品牌展示与关键信息输出。优先级控制和源码逻辑(如 ResourceBanner 的加载机制)为深度定制提供了扩展空间‌

九、源码地址

03-spring-boot-banner