springboot banner(超详细)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
- 《从零手撸:仿小红书(微服务架构)》 已完结,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
前言
在 Spring Boot 应用启动时,我们常常会看到一系列由 ASCII 字符组成的欢迎信息,这些信息被称为 Spring Boot Banner。Banner 是应用启动时展示的“门面”,不仅包含版本信息、作者声明,还能通过自定义设计增强品牌辨识度或传递调试信息。对于编程初学者而言,掌握如何控制和设计 Banner 是理解 Spring Boot 核心机制的入门实践;而中级开发者则可以通过高级技巧实现动态 Banner 或环境适配功能。本文将从基础概念到实战案例,逐步解析如何玩转 Spring Boot Banner。
什么是 Spring Boot Banner?
Banner 是 Spring Boot 应用启动时输出的文本信息,通常包含以下内容:
- 应用名称和版本号
- Spring Boot 框架版本
- 自定义的欢迎语或版权信息
- 调试信息(如启动时间、配置参数)
例如,一个默认的 Spring Boot 应用启动时会显示类似以下内容:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.0.0)
Banner 的作用类似于网站的 Logo 或 App 的启动画面,通过视觉化元素传递关键信息。但它的灵活性远超静态图片,支持文本、颜色和动态内容,是开发者展示个性或功能的窗口。
如何自定义 Banner?
1. 禁用默认 Banner
最基础的操作是完全关闭 Banner。在 application.properties
中添加以下配置:
spring.main.banner-mode=off
此时应用启动时将不再显示任何 Banner 信息,适合追求极简输出的场景。
2. 使用纯文本文件替换默认 Banner
Spring Boot 允许通过 banner.txt
文件覆盖默认内容。操作步骤如下:
- 在项目资源目录(
src/main/resources
)下创建banner.txt
文件。 - 在文件中编写任意文本内容,支持换行和特殊字符。
示例 banner.txt
内容:
_______ _______ _______ _________ _______
( ____ \( ___ )( ___ )\__ __/ ( ____ \
| ( \/| ( ) || ( ) | ) ( | ( \/
| (_____ | (___) || (___) | | | | (_____
(_____ )| ___ || ___ | | | _____ )
) || ( ) || ( ) | | | | _____)
/\____) || ) ( || ) ( | | | | |
\_______)|/ \||/ \| )_( )_(
启动应用后,将看到自定义的 ASCII 艺术图案。这种实现方式简单直接,适合快速上手。
3. 通过 Java 代码动态生成 Banner
对于需要动态内容(如时间戳、环境变量)的场景,可以通过实现 org.springframework.boot.Banner
接口自定义逻辑。
步骤:
- 创建一个实现
Banner
接口的类:
import org.springframework.boot.Banner;
import java.io.PrintStream;
public class CustomBanner implements Banner {
@Override
public void printBanner(Environment environment, Class<?> source, PrintStream out) {
out.println("自定义 Banner 开始");
out.println("当前环境:" + environment.getProperty("spring.profiles.active"));
out.println("当前时间:" + System.currentTimeMillis());
out.println("自定义 Banner 结束");
}
}
- 在主类中通过
SpringApplication
配置该 Banner:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootBannerApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(SpringBootBannerApplication.class);
application.setBanner(new CustomBanner());
application.run(args);
}
}
运行后,输出将包含环境变量和实时时间,如:
自定义 Banner 开始
当前环境:dev
当前时间:1717023456789
自定义 Banner 结束
4. 混合使用文本与代码逻辑
若需结合静态文本和动态内容,可将 banner.txt
与代码逻辑结合。例如,在 CustomBanner
类中读取文本文件并拼接动态信息:
public class HybridBanner implements Banner {
@Override
public void printBanner(Environment env, Class<?> source, PrintStream out) {
// 读取 banner.txt 内容
try (InputStream input = this.getClass().getResourceAsStream("/banner.txt")) {
if (input != null) {
byte[] bytes = new byte[input.available()];
input.read(bytes);
out.write(bytes);
}
} catch (IOException e) {
e.printStackTrace();
}
// 添加动态信息
out.println("运行环境:" + env.getProperty("spring.profiles.active"));
}
}
高级技巧与最佳实践
1. 根据环境切换 Banner
通过 Environment
对象判断激活的 Profile,动态选择不同的 Banner:
public class ProfileAwareBanner implements Banner {
@Override
public void printBanner(Environment env, Class<?> source, PrintStream out) {
String profile = env.getProperty("spring.profiles.active");
if ("prod".equals(profile)) {
out.println("生产环境 Banner");
} else {
out.println("开发环境 Banner");
}
}
}
2. 使用 ANSI 颜色增强视觉效果
ANSI 转义码可为文本添加颜色和样式。例如,在 banner.txt
中添加:
\033[31m红色文字\033[0m
\033[34m蓝色文字\033[0m
ANSI 代码 | 效果 |
---|---|
31 | 红色 |
34 | 蓝色 |
0 | 重置默认颜色 |
3. 通过配置文件控制 Banner 位置
在 application.properties
中调整 Banner 的输出位置:
spring.main.banner-captured=true
常见问题与解决方案
问题 1:自定义 Banner 未生效
原因:可能未正确配置 banner.txt
的位置,或代码实现时未通过 SpringApplication
设置。
解决:
- 确保
banner.txt
存在于src/main/resources
目录。 - 检查代码中是否遗漏
application.setBanner()
的调用。
问题 2:Banner 文字显示乱码
原因:文件编码格式与项目设置不一致(如使用 GBK 而非 UTF-8)。
解决:
- 将
banner.txt
的编码格式改为 UTF-8。 - 在 IDE 中设置项目编码为 UTF-8。
问题 3:Banner 过大影响启动速度
原因:过长的文本或复杂计算导致启动延迟。
解决:
- 精简 Banner 内容,避免嵌套多层 ASCII 图案。
- 在生产环境通过
banner-mode=off
关闭 Banner。
结论
Spring Boot Banner 是一个容易被低估却极具潜力的功能模块。通过本文的讲解,读者可以掌握从基础禁用到高级动态生成的完整实现路径。无论是通过文本文件快速替换,还是通过代码实现环境感知,Banner 都能帮助开发者提升应用的可维护性和品牌价值。
对于初学者,建议从 banner.txt
入手,体验静态内容的修改;中级开发者可尝试结合 Environment
对象实现环境适配逻辑。随着对 Spring Boot 核心机制的深入理解,Banner 还可作为调试信息输出的载体,成为开发流程中的得力助手。
通过合理设计和利用 Banner,每个 Spring Boot 应用都能拥有独特的“启动仪式”,让代码不仅高效运行,更能传递开发者的心意与创意。