javascript
用了自定义Banner后,SpringBoot瞬间变的高大上了...
Spring?Boot?在啟動的時候,我們或許想要把自己公司的?logo,或者是項目的?logo?放上去,我們可以試試本文的這些方法,可以讓你快速制作一些?Spring?Boot?項目啟動時的彩蛋,以提高項目的辨識度,或者是純碎為了給枯燥的生活平添一些樂趣,那么本文這些內容能很好的幫助到你。
本文知識點,如下圖所示:
Banner效果展示
Spring Boot?默認的?banner?圖展示效果如下:
我們可以把它變成這樣的:
或者是這樣的:
或者是這樣的:
簡直秀的飛起,不但能自定義內容,還能自定義顏色,那接下來我們就來看它是如何實現的吧。
自定義Banner
自定義?banner?的實現方式有兩種,一種是通過重寫自定義的 Banner?類來實現,另一種通過?txt?文件來實現。
1.重寫Banner類
首先,需要自定義類實現?Banner?接口,實現代碼如下:
import org.springframework.boot.Banner; import org.springframework.core.env.Environment;import java.io.PrintStream;public class MyBanner implements Banner {private static final String BANNER =" ___ ___ .__ .__ \n" +" / | \\ ____ | | | | ____ \n" +"/ ~ \\_/ __ \\| | | | / _ \\ \n" +"\\ Y /\\ ___/| |_| |_( <_> )\n" +" \\___|_ / \\___ >____/____/\\____/ \n" +" \\/ \\/ ";@Overridepublic void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {out.println(BANNER);out.println();} }其中 BANNER?變量為自定義?banner?的內容,我這放入了一個 hello,然后在?Spring?Boot?啟動時設置?Banner?類為自定義類,實現代碼如下:
public static void main(String[] args) {SpringApplication springApplication = new SpringApplication(DemoApplication.class);// 設置自定義 BannerspringApplication.setBanner(new MyBanner());// 啟動 Spring BootspringApplication.run(args); }最終的執行效果如下圖所示:
2.通過txt文件實現
我們可以在 Spring Boot 工程的 /src/main/resources 目錄下創建一個 banner.txt 文件,然后將 ASCII 字符畫復制進去,就能替換默認的 banner 了,如下圖所示:
之所以可以使用?banner.txt?文件的方式實現自定義?banner?是因為?Spring?Boot?框架在啟動時會按照以下順序,查找?banner?信息:
- 先在 Classpath 下找 文件 banner.gif?或?banner.jpg 或?banner.png , 先找到誰就用誰;
- 以上都沒有就在 Classpath 下找 banner.txt;
- 如果都沒找到才會使用默認的 SpringBootBanner。
以上知識點是在?SpringApplicationBannerPrinter?源碼中得知的,核心源碼如下:
class SpringApplicationBannerPrinter {static final String BANNER_LOCATION_PROPERTY = "spring.banner.location";static final String BANNER_IMAGE_LOCATION_PROPERTY = "spring.banner.image.location";static final String DEFAULT_BANNER_LOCATION = "banner.txt";static final String[] IMAGE_EXTENSION = new String[]{"gif", "jpg", "png"};// 忽略非核心源碼private Banner getBanner(Environment environment) {SpringApplicationBannerPrinter.Banners banners = new SpringApplicationBannerPrinter.Banners();// 獲取圖片形式 bannerbanners.addIfNotNull(this.getImageBanner(environment));// 獲取文字形式 bannerbanners.addIfNotNull(this.getTextBanner(environment));if (banners.hasAtLeastOneBanner()) {return banners;} else {return this.fallbackBanner != null ? this.fallbackBanner : DEFAULT_BANNER;}}private Banner getTextBanner(Environment environment) {String location = environment.getProperty("spring.banner.location", "banner.txt");Resource resource = this.resourceLoader.getResource(location);return resource.exists() ? new ResourceBanner(resource) : null;}private Banner getImageBanner(Environment environment) {String location = environment.getProperty("spring.banner.image.location");if (StringUtils.hasLength(location)) {Resource resource = this.resourceLoader.getResource(location);return resource.exists() ? new ImageBanner(resource) : null;} else {String[] var3 = IMAGE_EXTENSION;int var4 = var3.length;for(int var5 = 0; var5 < var4; ++var5) {String ext = var3[var5];Resource resource = this.resourceLoader.getResource("banner." + ext);if (resource.exists()) {return new ImageBanner(resource);}}return null;}} }所以我們才能使用?banner.txt?自定義?banner?信息,當然你也可以使用圖片的方式來自定義?banner。
小技巧:我們可以使用 banner.gif?來實現動態?banner?的效果,動手試試吧。
此種方式實現起來比較簡單,且是無代碼侵入式的,推薦使用這種方式。
Banner樣式控制
上面講了?banner?文字部分的修改,我們還可以修改?banner?的演示以及其他屬性,例如字體的樣式,粗體、斜體等,Spring?Boot?為提供了三個枚舉類來設定這些樣式,他們分別是:
- AnsiColor:用來設定字符的前景色;
- AnsiBackground:用來設定字符的背景色。
- AnsiStyle:用來控制加粗、斜體、下劃線等等。
例如,我們可以使用?AnsiColor?來設置顏色,banner.txt?中的信息如下:
${AnsiColor.BRIGHT_RED} _ _ _ _ ${AnsiColor.BRIGHT_RED} | || | ___ | | | | ___ ${AnsiColor.BRIGHT_YELLOW} | __ | / -_) | | | | / _ \ ${AnsiColor.BRIGHT_YELLOW} |_||_| \___| _|_|_ _|_|_ \___/ ${AnsiColor.BRIGHT_RED}_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ${AnsiColor.BRIGHT_RED}"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'最終的展示效果如下圖所示:
Banner使用輸出變量
在?banner.txt?中我們還可以輸出一些全局變量,例如:
- ${application.version}:用來獲取 MANIFEST.MF 文件中的版本號;
- ${application.formatted-version}:格式化后的 ${application.version} 版本信息;
- ${spring-boot.version}:Spring Boot 版本號;
- ${spring-boot.formatted-version}:格式化后的 ${spring-boot.version} 版本信息。
使用示例如下:
/ˉˉˉˉ\ o-|[][]|-o |_--_| /ˉˉˉˉˉˉˉˉˉˉ\ ||| ?? ||| ||| ||| (o)| |(o) | || | |__||__| |__||__|Spring Boot 版本:${spring-boot.version}Banner圖在線生成
在線生成?banner?的地址:
- https://www.bootschool.net/ascii
- http://www.network-science.de/ascii/
- http://patorjk.com/software/taag/
- http://www.degraeve.com/img2txt.php
推薦使用第一種,使用縮略圖如下:
隱藏Banner
如果我們需要隱藏 banner?信息,可以通過以下三種方法實現。
1.通過代碼關閉Banner
我們可以在?Spring?Boot 啟動(run)之前設置隱藏 banner,實現代碼如下:
public class DemoApplication {public static void main(String[] args) {SpringApplication springApplication = new SpringApplication(DemoApplication.class);// 隱藏 bannerspringApplication.setBannerMode(Banner.Mode.OFF);// 啟動 Spring BootspringApplication.run(args);} }2.通過配置文件隱藏Banner
在?Spring?Boot?的配置文件 application.properties?通過設置如下配置來隱藏?banner?的顯示,配置如下:
spring.main.banner-mode=off3.在Idea中隱藏Banner
我們可以在?Idea?的調試配置中隱藏?banner,如下圖所示:
附:彩蛋
文章的末尾,附一個七彩佛祖的 banner?內容:
${AnsiColor.BRIGHT_GREEN}$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ${AnsiColor.BRIGHT_YELLOW}$$ _.ooOoo._ $$ ${AnsiColor.BRIGHT_RED}$$ o888888888o $$ ${AnsiColor.BRIGHT_CYAN}$$ 88" . "88 $$ ${AnsiColor.BRIGHT_MAGENTA}$$ (| ^_^ |) $$ ${AnsiColor.BRIGHT_GREEN}$$ O\ = /O $$ ${AnsiColor.BRIGHT_RED}$$ ____/`-----'\____ $$ ${AnsiColor.BRIGHT_CYAN}$$ .' \\| |$$ `. $$ ${AnsiColor.BRIGHT_MAGENTA}$$ / \\||| : |||$$ \ $$ ${AnsiColor.BRIGHT_GREEN}$$ / _||||| -:- |||||- \ $$ ${AnsiColor.BRIGHT_YELLOW}$$ | | \\\ - $$/ | | $$ ${AnsiColor.BRIGHT_GREEN}$$ | \_| ''\-----/'' | | $$ ${AnsiColor.BRIGHT_YELLOW}$$ \ .-\___ `-` ____/-. / $$ ${AnsiColor.BRIGHT_CYAN}$$ ___`. .' /--.--\ `. . ___ $$ ${AnsiColor.BRIGHT_RED}$$ ."" '< `.____\_<|>_/____.' >'"". $$ ${AnsiColor.BRIGHT_GREEN}$$ | | : `- \`.;`.\ _ /``;.`/ - ` : | | $$ ${AnsiColor.BRIGHT_YELLOW}$$ \ \ `-. \_ ___\ /___ _/ .-` / / $$ ${AnsiColor.BRIGHT_CYAN}$$ ========`-.____`-.____\_____/____.-`____.-'======== $$ ${AnsiColor.BRIGHT_MAGENTA}$$ `=---=' $$ ${AnsiColor.BRIGHT_YELLOW}$$ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ $$ ${AnsiColor.BRIGHT_GREEN}$$ 佛祖保佑 永無BUG 永不修改 $$ ${AnsiColor.BRIGHT_YELLOW}$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ${AnsiColor.BRIGHT_YELLOW}實現效果如下圖所示:
總結
本文我們講了自定義?banner?的兩種方法,自定義?banner?類和?banner.txt?的方式,其中以源碼分析的方式講了為什么可以通過 banner.txt?自定義?banner信息。我們還講了?banner?樣式控制(顏色、字體樣式等)和全局變量輸出的方法,以及?banner?圖在線生成的幾個地址,最后還講了 3?種隱藏?banner?的方法。
最后的話
認真寫好每一篇原創,只為不辜負你的觀看。寫作是一件很酷并且能幫助他人的事,我希望能一直堅持下去。如果覺得有用,請隨手給我一個贊吧,他將鼓勵我產出更好的文章。
參考 &?鳴謝
https://www.jianshu.com/p/c1f7617c99aa
https://www.jianshu.com/p/9a2c20e3766d
更多精彩內容,請關注微信公眾號「Java中文社群」
總結
以上是生活随笔為你收集整理的用了自定义Banner后,SpringBoot瞬间变的高大上了...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java面试详解(2020版):500+
- 下一篇: 第 6-7 课:Java 分布式框架面试