詳解SpringBoot基礎(chǔ)之banner玩法解析
SpringBoot項(xiàng)目啟動時會在控制臺打印一個默認(rèn)的啟動圖案,這個圖案就是我們要講的banner??此坪唵蔚腷anner,我們能夠?qū)λ鲂┦裁茨兀勘酒恼戮蛶Т蠹疑钊肓私庖幌耣anner的使用(版本:SpringBoot2.1.4)。

制作自己的banner
第一步:在src/main/resources下面創(chuàng)建banner.txt。
第二步:訪問網(wǎng)站 http://patorjk.com/software/taag,在網(wǎng)站“Type Something ”處輸入想要制作的單詞(比如:Hello World),會生成對應(yīng)的字符。也可以通過其他參數(shù)來調(diào)整字符的樣式。

復(fù)制生成的字符,粘貼到banner.txt,再次啟動程序便可以打印出指定的banner了。
個人比較喜歡的banner是如下圖形:
${AnsiColor.BRIGHT_YELLOW}
////////////////////////////////////////////////////////////////////
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕機(jī) 永無BUG //
////////////////////////////////////////////////////////////////////
在新版本的SpringBoot中,支持了gif、jpg和png的圖片形式的banner打印。當(dāng)然,并不會把圖片直接打印在控制臺,而是將其像素解析轉(zhuǎn)換成assii編碼之后打印。
對于gif動圖,會把動圖的每個圖片都打印出來,如果動圖比較大,打印時間較長。可以嘗試一下,但建議不要使用gif。
在banner.txt中,還可以進(jìn)行一些設(shè)置,比如上圖中的${AnsiColor.BRIGHT_YELLOW}。
- AnsiColor.BRIGHT_RED:設(shè)置控制臺中輸出內(nèi)容的顏色
- application.version:用來獲取MANIFEST.MF文件中的版本號
- application.formatted-version:格式化后的application.version版本信息
- spring-boot.version:Spring Boot的版本號
- spring-boot.formatted-version:格式化后的spring-boot.version版本信息
Banner接口
在未指定banner.txt或banner圖片時,默認(rèn)圖形存儲在哪里了呢?下面我們了解一下Banner接口。
@FunctionalInterface
public interface Banner {
// 打印banner
void printBanner(Environment environment, Class<?> sourceClass, PrintStream out);
enum Mode {
// 關(guān)閉
OFF,
// 控制臺
CONSOLE,
// 日志文件
LOG
}
}
在banner接口中提供了打印banner的方法和一個枚舉類。枚舉類有三個值:OFF、CONSOLE、LOG,用來控制banner的打印,分別對應(yīng):關(guān)閉打印、控制臺打印和日志打印。
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)行改造,手動創(chuàng)建SpringApplication對象,然后設(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è)置就比較簡單,直接在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來指定路徑,否則會出現(xiàn)亂碼情況。
如果不想顯示banner,可以在代碼中通過setBannerMode(Banner.Mode.OFF)方法或通過參數(shù)配置spring.main.banner-mode=off來關(guān)閉banner的打印。上面示例中已經(jīng)有所展示。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot訪問template下的html頁面的實(shí)現(xiàn)配置
這篇文章主要介紹了springboot訪問template下的html頁面的實(shí)現(xiàn)配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(4)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07
圖文教程教你IDEA中的Spring環(huán)境搭建+簡單入門
這篇文章主要介紹了圖文教程教你IDEA中的Spring環(huán)境搭建+簡單入門,Spring的環(huán)境搭建使用Maven更加方便,需要的朋友可以參考下2023-03-03
Java使用百度AI接口實(shí)現(xiàn)智能機(jī)器人對話系統(tǒng)
AI已經(jīng)在各行各業(yè)中廣泛應(yīng)用,助力于各式各樣的業(yè)務(wù),而在機(jī)器人對話中,我們可以通過利用百度AI中的自然語言處理、問答知識圖譜等技術(shù),使機(jī)器人可以更加智能化、自然化的為用戶服務(wù),本文介紹Java利用百度AI接口實(shí)現(xiàn)智能機(jī)器人對話系統(tǒng)2024-01-01
spring boot空屬性賦值問題與aspect日志實(shí)現(xiàn)方法
這篇文章主要介紹了spring boot空屬性賦值問題與aspect日志實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
Spring中@Configuration注解的Full模式和Lite模式詳解
這篇文章主要介紹了Spring中@Configuration注解的Full模式和Lite模式詳解,準(zhǔn)確來說,Full?模式和?Lite?模式其實(shí)?Spring?容器在處理?Bean?時的兩種不同行為,這兩種不同的模式在使用時候的表現(xiàn)完全不同,今天就來和各位小伙伴捋一捋這兩種模式,需要的朋友可以參考下2023-09-09
ThreadLocal線程在Java框架中的應(yīng)用及原理深入理解
這篇文章主要介紹了ThreadLocal在Java框架中的應(yīng)用及原理深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Java實(shí)現(xiàn)stream的三個常用方式(toMap,groupingBy,findFirst)
本文主要介紹了Java實(shí)現(xiàn)stream的三個常用方式,主要包括toMap,groupingBy,findFirst,具有一定的參考價值,感興趣的可以了解一下2023-10-10
Maven?繼承父工程時的relativePath標(biāo)簽詳細(xì)解析
這篇文章主要介紹了Maven?繼承父工程時的relativePath標(biāo)簽解析,通過本文學(xué)習(xí)你需要注意子模塊想要用父模塊pom中的版本,請注意配置relativePath屬性,需要的朋友可以參考下2022-12-12

