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" +
" \\/ \\/ ";
@Override
public 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);
// 設置自定義 Banner
springApplication.setBanner(new MyBanner());
// 啟動 Spring Boot
springApplication.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();
// 獲取圖片形式 banner
banners.addIfNotNull(this.getImageBanner(environment));
// 獲取文字形式 banner
banners.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);
// 隱藏 banner
springApplication.setBannerMode(Banner.Mode.OFF);
// 啟動 Spring Boot
springApplication.run(args);
}
}
2.通過配置文件隱藏Banner
在 Spring Boot 的配置文件 application.properties
通過設置如下配置來隱藏 banner 的顯示,配置如下:
spring.main.banner-mode=off
3.在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 的方法。
最后的話
認真寫好每一篇原創,只為不辜負你的觀看。寫作是一件很酷並且能幫助他人的事,我希望能一直堅持下去。如果覺得有用,請隨手給我一個贊吧,他將鼓勵我產出更好的文章。