SpringBoot詳解Banner的使用
Banner的設置方式有以下幾種
1、默認:SpringBoot + 版本號;
2、添加自定義資源文件:banner.txt;
3、添加自定義資源文件:banner.jpg/png/gif;
4、SpringApplication的setBanner方法,自定義資源;
下面我們進入源碼,SpringBoot如何實現(xiàn)banner的加載:
進入SpringApplication的run方法,可以看到如下的一行內(nèi)容:
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(日志)。如果是關閉狀態(tài),那么直接返回空。
接下來程序會根據(jù)模式是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。否則就返回不含有自定義信息的,系統(tǒng)默認banner。
LOG方式下,會調(diào)用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內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Springboot+Flowable?快速實現(xiàn)工作流的開發(fā)流程
這篇文章主要介紹了Springboot+Flowable?快速實現(xiàn)工作流的開發(fā)流程,本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02
使用Java代碼獲取服務器性能信息及局域網(wǎng)內(nèi)主機名
這篇文章主要介紹了使用Java代碼獲取服務器性能信息及局域網(wǎng)內(nèi)主機名的方法,方便對服務器的遠程管理和團隊協(xié)作時用到,而且文中的方法無需調(diào)用jni,需要的朋友可以參考下2015-11-11
springboot本地調(diào)試沒問題,打包運行報錯原因及分析
這篇文章主要介紹了springboot本地調(diào)試沒問題,打包運行報錯原因及分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
postman?如何實現(xiàn)傳遞?ArrayList?給后臺
這篇文章主要介紹了postman?如何實現(xiàn)傳遞?ArrayList給后臺,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12

