这篇文章主要介绍了超个性修改SpringBoot项目的启动banner的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Banner的设置方式有以下几种
1、默认:SpringBoot + 版本号;
2、添加自定义资源文件:banner.txt;
3、添加自定义资源文件:banner.jpg/png/gif;
4、SpringApplication的setBanner方法,自定义资源;
下面我们进入源码,SpringBoot如何实现banner的加载:
进入SpringApplication的run方法,可以看到如下的一行内容:
Banner printedBanner = printBanner(environment);
这个就是获取banner的入口,我们来跟进下这个方法:
private Banner printBanner(ConfigurableEnvironment environment) {
if (this.bannerMode == Banner.Mode.OFF) {
return null;
}
ResourceLoader resourceLoader = (this.resourceLoader != null) ? this.resourceLoader
: new DefaultResourceLoader(getClassLoader());
SpringApplicationBannerPrinter bannerPrinter = new SpringApplicationBannerPrinter(resourceLoader, this.banner);
if (this.bannerMode == Mode.LOG) {
return bannerPrinter.print(environment, this.mainApplicationClass, logger);
}
return bannerPrinter.print(environment, this.mainApplicationClass, System.out);
代码首先检验是否关闭了banner(可以通过spring.main.banner-mode=off来配置),Banner.Mode的取值方式有三种,包括OFF、CONSOLE(控制台,默认)以及LOG(日志)。如果是关闭状态,那么直接返回空。
接下来程序会根据模式是CONSOLE或是LOG来分别进行处理。处理过程比较相似,我们先看LOG方式打印的方法:
Banner print(Environment environment, Class<?> sourceClass, Log logger) {
Banner banner = getBanner(environment);
try {
logger.info(createStringFromBanner(banner, environment, sourceClass));
}
catch (UnsupportedEncodingException ex) {
logger.warn("Failed to create String for banner", ex);
}
return new PrintedBanner(banner, sourceClass);
}
我们重点先关注getBanner方法:
private Banner getBanner(Environment environment) {
Banners banners = new Banners();
banners.addIfNotNull(getImageBanner(environment));
banners.addIfNotNull(getTextBanner(environment));
if (banners.hasAtLeastOneBanner()) {
return banners;
}
if (this.fallbackBanner != null) {
return this.fallbackBanner;
}
return DEFAULT_BANNER;
}
getBanner方法首先会尝试通过getImageBanner加载图片的banner,从配置文件的"spring.banner.image.location"配置项来拼接后缀gif、jpg、png,读取相应的文件,返回一个ImageBanner对象,添加到banners;
如果没有图片的banner,则会通过getTextBanner方法获取txt,从配置文件的"spring.banner.location"获取配置项,默认为banner.txt,读取文件,返回ResourceBanner对象,添加到banners;
这时如果banners还是空的,说明没有ImageBanner和ResourceBanner被配置,但是有手动设置的fallbackBanner,那么就会返回它,fallbackBanner就是通过setBanner方法加入的banner。否则就返回不含有自定义信息的,系统默认banner。
LOG方式下,会调用logger来进行info级别的日志输出。
而CONSOLE方式的情况下,方法如下:
Banner print(Environment environment, Class<?> sourceClass, PrintStream out) {
Banner banner = getBanner(environment);
banner.printBanner(environment, sourceClass, out);
return new PrintedBanner(banner, sourceClass);
}
这里的getBanner方法和LOG方式是一样的,在这就不再赘述了。与LOG方式不同的是,这种方式是通过System.out标准输出流,将banner打印到控制台上。
到此这篇关于SpringBoot详解Banner的使用的文章就介绍到这了,更多相关SpringBoot Banner内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:SpringBoot详解Banner的使用
基础教程推荐
- java基础知识之FileInputStream流的使用 2023-08-11
- Java实现线程插队的示例代码 2022-09-03
- Java并发编程进阶之线程控制篇 2023-03-07
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- Java文件管理操作的知识点整理 2023-05-19
- java实现多人聊天系统 2023-05-19
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- Java数据结构之对象比较详解 2023-03-07
- Java实现查找文件和替换文件内容 2023-04-06
- springboot自定义starter方法及注解实例 2023-03-31