SpringBoot之Banner的使用示例
背景
初次運(yùn)行SpringBoot的小伙伴想必對(duì)于SpringBoot打印的Banner很感興趣
Spring Boot在啟動(dòng)項(xiàng)目時(shí),控制臺(tái)會(huì)打印一個(gè)Spring的logo。如果不做任何配置
該信息來(lái)源于SpringBootBanner類(lèi)的靜態(tài)常量BANNER,該屬性是一個(gè)字符串?dāng)?shù)組,不指定任何banner屬性時(shí),控制臺(tái)默認(rèn)輸出該數(shù)組數(shù)據(jù)。我們可以通過(guò)Spring Boot提供的強(qiáng)大配置功能來(lái)改變banner的輸出。
通常長(zhǎng)成這樣
一個(gè)Spring撲面而來(lái)~
那么我們能否定制自己的啟動(dòng)頁(yè)呢?
源碼
SpringBoot在啟動(dòng)時(shí)會(huì)調(diào)用如下一段代碼
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); } public Banner print(Environment environment, Class<?> sourceClass, PrintStream out) { Banner banner = getBanner(environment, this.fallbackBanner); banner.printBanner(environment, sourceClass, out); return new PrintedBanner(banner, sourceClass); } private Banner getBanner(Environment environment, Banner definedBanner) { 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; } private static final Banner DEFAULT_BANNER = new SpringBootBanner();
而 SpringBootBanner長(zhǎng)成這樣
/** * Default Banner implementation which writes the 'Spring' banner. * * @author Phillip Webb */ class SpringBootBanner implements Banner { private static final String[] BANNER = { "", " . ____ _ __ _ _", " /\\\\ / ___'_ __ _ _(_)_ __ __ _ \\ \\ \\ \\", "( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\", " \\\\/ ___)| |_)| | | | | || (_| | ) ) ) )", " ' |____| .__|_| |_|_| |_\\__, | / / / /", " =========|_|==============|___/=/_/_/_/" }; private static final String SPRING_BOOT = " :: Spring Boot :: "; private static final int STRAP_LINE_SIZE = 42; @Override public void printBanner(Environment environment, Class<?> sourceClass, PrintStream printStream) { for (String line : BANNER) { printStream.println(line); } String version = SpringBootVersion.getVersion(); version = (version == null ? "" : " (v" + version + ")"); String padding = ""; while (padding.length() < STRAP_LINE_SIZE - (version.length() + SPRING_BOOT.length())) { padding += " "; } printStream.println(AnsiOutput.toString(AnsiColor.GREEN, SPRING_BOOT, AnsiColor.DEFAULT, padding, AnsiStyle.FAINT, version)); printStream.println(); } }
上述代碼可以看到banner存在兩種 imageBanner和textBanner
imageBanner需要配置屬性為banner.image.location
或者支持名為banner格式為 "gif", "jpg", "png的圖片
textBanner支持默認(rèn)情況下在banner.location 或者默認(rèn)為banner.txt
比如我們可以如下設(shè)置
在resource分別放置banner.txt和banner.png
banner.png
banner.txt
/$$$$$$$$ /$$$$$$
| $$_____//$$__ $$
| $$ | $$ \__/
| $$$$$ | $$$$$$$
| $$__/ | $$__ $$
| $$ | $$ \ $$
| $$ | $$$$$$/
|__/ \______/
我們可以看一下結(jié)果
哈哈 F6小人變成了這樣?。?!
關(guān)閉banner顯示
在程序中可以使用app.setBannerMode(Mode.OFF);來(lái)關(guān)閉banner,利用屬性值設(shè)置則為:spring.main.banner-mode=off
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot項(xiàng)目啟動(dòng)時(shí)增加自定義Banner的簡(jiǎn)單方法
- SpringBoot之自定義Banner詳解
- 教你怎么用Springboot自定義Banner圖案
- Springboot居然可以設(shè)置動(dòng)態(tài)的Banner(推薦)
- Springboot自定義banner及驗(yàn)證過(guò)程
- SpringBoot個(gè)性化啟動(dòng)Banner設(shè)置方法解析
- 超個(gè)性修改SpringBoot項(xiàng)目的啟動(dòng)banner的方法
- 詳解SpringBoot基礎(chǔ)之banner玩法解析
- SpringBoot詳解Banner的使用
相關(guān)文章
詳談Enumeration接口和Iterator接口的區(qū)別
下面小編就為大家?guī)?lái)一篇詳談Enumeration接口和Iterator接口的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08LinkedBlockingQueue鏈?zhǔn)阶枞?duì)列的使用和原理解析
這篇文章主要介紹了LinkedBlockingQueue鏈?zhǔn)阶枞?duì)列的使用和原理解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10利用spring的攔截器自定義緩存的實(shí)現(xiàn)實(shí)例代碼
這篇文章主要介紹了利用spring的攔截器自定義緩存的實(shí)現(xiàn)實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02JAVA動(dòng)態(tài)維度笛卡爾積輸出的實(shí)現(xiàn)
本文主要介紹了JAVA動(dòng)態(tài)維度笛卡爾積輸出的實(shí)現(xiàn),通過(guò)動(dòng)態(tài)生成笛卡爾積,可以方便地處理多維數(shù)據(jù)集,提高數(shù)據(jù)處理效率,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02解決Java項(xiàng)目啟動(dòng)報(bào)錯(cuò):Logback?configuration?error?detected:問(wèn)題
這篇文章主要介紹了解決Java項(xiàng)目啟動(dòng)報(bào)錯(cuò):Logback?configuration?error?detected:問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04如何獲取MyBatis Plus執(zhí)行的完整的SQL語(yǔ)句
這篇文章主要介紹了如何獲取MyBatis Plus執(zhí)行的完整的SQL語(yǔ)句問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07java 內(nèi)嵌Groovy動(dòng)態(tài)腳本操作
這篇文章主要介紹了java 內(nèi)嵌Groovy動(dòng)態(tài)腳本操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07