詳解SpringBoot基礎(chǔ)之banner玩法解析
SpringBoot項(xiàng)目啟動(dòng)時(shí)會(huì)在控制臺(tái)打印一個(gè)默認(rèn)的啟動(dòng)圖案,這個(gè)圖案就是我們要講的banner??此坪?jiǎn)單的banner,我們能夠?qū)λ鲂┦裁茨??本篇文章就帶大家深入了解一下banner的使用(版本:SpringBoot2.1.4)。
制作自己的banner
第一步:在src/main/resources下面創(chuàng)建banner.txt。
第二步:訪問網(wǎng)站 http://patorjk.com/software/taag,在網(wǎng)站“Type Something ”處輸入想要制作的單詞(比如:Hello World),會(huì)生成對(duì)應(yīng)的字符。也可以通過其他參數(shù)來調(diào)整字符的樣式。
復(fù)制生成的字符,粘貼到banner.txt,再次啟動(dòng)程序便可以打印出指定的banner了。
個(gè)人比較喜歡的banner是如下圖形:
${AnsiColor.BRIGHT_YELLOW} //////////////////////////////////////////////////////////////////// // _ooOoo_ // // o8888888o // // 88" . "88 // // (| ^_^ |) // // O\ = /O // // ____/`---'\____ // // .' \\| |// `. // // / \\||| : |||// \ // // / _||||| -:- |||||- \ // // | | \\\ - /// | | // // | \_| ''\---/'' | | // // \ .-\__ `-` ___/-. / // // ___`. .' /--.--\ `. . ___ // // ."" '< `.___\_<|>_/___.' >'"". // // | | : `- \`.;`\ _ /`;.`/ - ` : | | // // \ \ `-. \_ __\ /__ _/ .-` / / // // ========`-.____`-.___\_____/___.-`____.-'======== // // `=---=' // // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // // 佛祖保佑 永不宕機(jī) 永無(wú)BUG // ////////////////////////////////////////////////////////////////////
在新版本的SpringBoot中,支持了gif、jpg和png的圖片形式的banner打印。當(dāng)然,并不會(huì)把圖片直接打印在控制臺(tái),而是將其像素解析轉(zhuǎn)換成assii編碼之后打印。
對(duì)于gif動(dòng)圖,會(huì)把動(dòng)圖的每個(gè)圖片都打印出來,如果動(dòng)圖比較大,打印時(shí)間較長(zhǎng)。可以嘗試一下,但建議不要使用gif。
在banner.txt中,還可以進(jìn)行一些設(shè)置,比如上圖中的${AnsiColor.BRIGHT_YELLOW}。
- AnsiColor.BRIGHT_RED:設(shè)置控制臺(tái)中輸出內(nèi)容的顏色
- application.version:用來獲取MANIFEST.MF文件中的版本號(hào)
- application.formatted-version:格式化后的application.version版本信息
- spring-boot.version:Spring Boot的版本號(hào)
- spring-boot.formatted-version:格式化后的spring-boot.version版本信息
Banner接口
在未指定banner.txt或banner圖片時(shí),默認(rèn)圖形存儲(chǔ)在哪里了呢?下面我們了解一下Banner接口。
@FunctionalInterface public interface Banner { // 打印banner void printBanner(Environment environment, Class<?> sourceClass, PrintStream out); enum Mode { // 關(guān)閉 OFF, // 控制臺(tái) CONSOLE, // 日志文件 LOG } }
在banner接口中提供了打印banner的方法和一個(gè)枚舉類。枚舉類有三個(gè)值:OFF、CONSOLE、LOG,用來控制banner的打印,分別對(duì)應(yīng):關(guān)閉打印、控制臺(tái)打印和日志打印。
banner接口的實(shí)現(xiàn)主要有ResourceBanner、ImageBanner、SpringBootBanner和其他內(nèi)部類的實(shí)現(xiàn)。其中上面看到的圖形的打印就來自于SpringBootBanner??匆幌略创a:
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 + ")" : ""; StringBuilder padding = new StringBuilder(); while (padding.length() < STRAP_LINE_SIZE - (version.length() + SPRING_BOOT.length())) { padding.append(" "); } printStream.println(AnsiOutput.toString(AnsiColor.GREEN, SPRING_BOOT, AnsiColor.DEFAULT, padding.toString(), AnsiStyle.FAINT, version)); printStream.println(); } }
在printBanner的方法實(shí)現(xiàn)中,首先打印了默認(rèn)的Banner字符串?dāng)?shù)組,然后將SPRING_BOOT和版本信息進(jìn)行拼接打印。
Banner的參數(shù)設(shè)置
banner的參數(shù)設(shè)定可以通過兩種形式,一種是代碼的形式,一種是配置文件的形式。
使用代碼的形式首先要將默認(rèn)的main方法進(jìn)行改造,手動(dòng)創(chuàng)建SpringApplication對(duì)象,然后設(shè)置相應(yīng)的參數(shù)。示例代碼:
public static void main(String[] args) { SpringApplication app = new SpringApplication(SpringbootBannerApplication.class); app.setBannerMode(Banner.Mode.CONSOLE); Banner banner = new ImageBanner(new ClassPathResource("banner1.png")); app.setBanner(banner); app.run(args); }
通過配置文件設(shè)置就比較簡(jiǎn)單,直接在application.properties中進(jìn)行配置,springboot已經(jīng)幫我們預(yù)制好了相應(yīng)的參數(shù)。
spring.banner.location=classpath:banner1.png spring.banner.image.margin=2 spring.banner.image.height=76 spring.banner.charset=UTF-8 spring.banner.image.invert=false spring.banner.image.location=banner1.png spring.main.banner-mode=console spring.main.show-banner=true
其中spring.main.show-banner來控制是否打印banner,在新版本中不建議使用,可以使用spring.main.banner-mode代替,將其值設(shè)置為OFF即可關(guān)閉banner的打印。
引入文本banner通過spring.banner.location來指定,引入圖片相關(guān)的banner需要通過spring.banner.image.location來指定路徑,否則會(huì)出現(xiàn)亂碼情況。
如果不想顯示banner,可以在代碼中通過setBannerMode(Banner.Mode.OFF)方法或通過參數(shù)配置spring.main.banner-mode=off來關(guān)閉banner的打印。上面示例中已經(jīng)有所展示。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 超個(gè)性修改SpringBoot項(xiàng)目的啟動(dòng)banner的方法
- Springboot居然可以設(shè)置動(dòng)態(tài)的Banner(推薦)
- 教你怎么用Springboot自定義Banner圖案
- SpringBoot之自定義Banner詳解
- SpringBoot詳解Banner的使用
- SpringBoot中的自定義Banner詳細(xì)解析
- SpringBoot的自定義banner使用方法
- SpringBoot之自定義banner使用代碼實(shí)例
- SpringBoot自定義Banner使用詳解
- SpringBoot打印Banner的實(shí)現(xiàn)示例
相關(guān)文章
淺談ThreadLocal為什么會(huì)內(nèi)存泄漏
這篇文章主要介紹了淺談ThreadLocal為什么會(huì)內(nèi)存泄漏,每個(gè)Thread內(nèi)部維護(hù)著一個(gè)ThreadLocalMap,它是一個(gè)Map,這個(gè)映射表的Key是一個(gè)弱引用,其實(shí)就是ThreadLocal本身,Value是真正存的線程變量Object,需要的朋友可以參考下2023-12-12java對(duì)接支付寶支付接口開發(fā)詳細(xì)步驟
本文主要介紹了java對(duì)接支付寶支付接口開發(fā)詳細(xì)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01用java的spring實(shí)現(xiàn)一個(gè)簡(jiǎn)單的IOC容器示例代碼
本篇文章主要介紹了用java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的IOC容器示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03java天數(shù)計(jì)算函數(shù)(當(dāng)前月天數(shù)、某月總天數(shù)及某月剩余天數(shù))4種方法實(shí)現(xiàn)代碼
日常開發(fā)中會(huì)遇到關(guān)于日期的計(jì)算,比如當(dāng)月的天數(shù)、兩日期之間的天數(shù)、當(dāng)月剩余天數(shù)等等,這篇文章主要給大家介紹了關(guān)于java天數(shù)計(jì)算函數(shù)(當(dāng)前月天數(shù)、某月總天數(shù)及某月剩余天數(shù))4種方法實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2023-10-10JAVA讀取HDFS的文件數(shù)據(jù)出現(xiàn)亂碼的解決方案
這篇文章主要介紹了JAVA讀取HDFS的文件數(shù)據(jù)出現(xiàn)亂碼的解決方案,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-11-11mybatis plus條件構(gòu)造器queryWrapper、updateWrapper
這篇文章主要介紹了mybatis plus條件構(gòu)造器queryWrapper、updateWrapper,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09spring-boot報(bào)錯(cuò)java: 程序包javax.servlet.http不存在
當(dāng)springboot項(xiàng)目從2.7.x的升級(jí)到3.0.x的時(shí)候,會(huì)遇到一個(gè)問題java: 程序包javax.servlet.http不存在,下面就來具體介紹一下,感興趣的可以了解一下2024-08-08解決Error:(5, 28) java: 程序包org.apache.ibatis.io
這篇文章主要介紹了解決Error:(5, 28) java: 程序包org.apache.ibatis.io不存在問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05