成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

教你怎么用Springboot自定義Banner圖案

瀏覽:69日期:2023-03-05 10:37:51
目錄一、前言二、實(shí)現(xiàn)原理三、默認(rèn) Banner 實(shí)現(xiàn)類四、ImageBanner五、ResourceBanner六、SpringBootBanner七、實(shí)現(xiàn) Banner 類八、Banner 樣式控制九、Banner 模式十、banner 圖生成工具一、前言

我們在啟動 Spring Boot 項(xiàng)目時(shí),默認(rèn)會在控制臺打印 Spring logo 和版本等信息,如下:

教你怎么用Springboot自定義Banner圖案

這就是 Spring Boot 的 Banner 打印功能,其實(shí)我們可以自定義打印的 banner ,也可以禁用和啟用打印 banner 功能。在真實(shí)項(xiàng)目中,我們一般不會去自定義 banner 圖案,它其實(shí)就是項(xiàng)目啟動時(shí)打印圖案或者文字而已,沒實(shí)際意義。推薦在自己個(gè)人項(xiàng)目玩玩這個(gè)彩蛋即可,順便簡單了解下它內(nèi)部實(shí)現(xiàn)原理。

比如,自定義一個(gè) banner 之后,項(xiàng)目啟動控制臺打印如下所示:

教你怎么用Springboot自定義Banner圖案

二、實(shí)現(xiàn)原理

Spring Boot 有一個(gè)接口 org.springframework.boot.Banner 專門實(shí)現(xiàn)這個(gè)操作。要想自定義打印 banner ,只要自定義一個(gè)類實(shí)現(xiàn)這個(gè)接口,重寫 printBanner 方法進(jìn)行打印即可。Springboot 項(xiàng)目啟動時(shí),會創(chuàng)建我們的實(shí)現(xiàn)類對象,并調(diào)用對象的 printBanner 方法。

package org.springframework.boot;import java.io.PrintStream;import org.springframework.core.env.Environment;/** * Interface class for writing a banner programmatically. * 用于以編程方式編寫 banner 的接口類 * @since 1.2.0 */@FunctionalInterfacepublic interface Banner {/** * Print the banner to the specified print stream. * 將 banner 打印到指定的打印流。 * @param environment the spring environment * @param sourceClass the source class for the application * @param out the output print stream */void printBanner(Environment environment, Class<?> sourceClass, PrintStream out);// 用于配置Banner的的枚舉值enum Mode {// 關(guān)閉 banner 打印OFF,// 打印 banner 到 控制臺CONSOLE,// 打印 banner 到日志文件LOG}}三、默認(rèn) Banner 實(shí)現(xiàn)類

Springboot 已經(jīng)有幾個(gè)自帶的 Banner 實(shí)現(xiàn)類,Springboot 啟動時(shí)會根據(jù)條件選擇不同的 Banner 實(shí)現(xiàn)類進(jìn)行打印 banner 信息。主要是 ImageBanner,ResourceBanner,SpringBootBanner 這三個(gè)實(shí)現(xiàn)類。

1.項(xiàng)目啟動時(shí),會判斷是否某些條件成立(項(xiàng)目中是否存在 banner 文件),成立則創(chuàng)建 ImageBanner 和 ResourceBanner 類對象,并且使用它們來打印 banner。

2.如果不成立檢查是否存在我們自定義的 Banner 實(shí)現(xiàn)類 fallbackBanner,如果存在則使用它來打印 banner 圖案。

3.否則,則使用默認(rèn)的 SpringBootBanner 實(shí)現(xiàn)類來打印 banner,也就是我們經(jīng)常看到 Spring 圖案。

// 獲取可用的 Banner 實(shí)現(xiàn)類private Banner getBanner(Environment environment) {Banners banners = new Banners();banners.addIfNotNull(getImageBanner(environment));banners.addIfNotNull(getTextBanner(environment));if (banners.hasAtLeastOneBanner()) {return banners;}if (this.fallbackBanner != null) {return this.fallbackBanner;}// SpringBootBanner 實(shí)現(xiàn)類return DEFAULT_BANNER;}四、ImageBanner

org.springframework.boot.ImageBanner 類是專門加載和打印圖片 banner 的。它檢查配置文件 application.proeprties 是否有配置的 spring.banner.image.location 變量的值,這個(gè)值可用來指定要加載的圖片,如果存在則構(gòu)建 ImageBanner 對象。如果沒有配置變量,則還會檢查 Classpath 下是否存在以 banner 開頭,以 .gif,.jpg,.png 結(jié)尾的圖片文件,如果有也會構(gòu)建 ImageBanner 對象。

class SpringApplicationBannerPrinter {static final String BANNER_IMAGE_LOCATION_PROPERTY = 'spring.banner.image.location';static final String[] IMAGE_EXTENSION = { 'gif', 'jpg', 'png' };// 獲取 ImageBanner 對象private Banner getImageBanner(Environment environment) { // 加載 spring.banner.image.location 指定的文件,文件存在則構(gòu)建 ImageBanner 對象String location = environment.getProperty(BANNER_IMAGE_LOCATION_PROPERTY);if (StringUtils.hasLength(location)) {Resource resource = this.resourceLoader.getResource(location);return resource.exists() ? new ImageBanner(resource) : null;}// 查找 banner.gif,banner.jpg,banner.png 文件for (String ext : IMAGE_EXTENSION) {Resource resource = this.resourceLoader.getResource('banner.' + ext);if (resource.exists()) {return new ImageBanner(resource);}}return null;}}五、ResourceBanner

org.springframework.boot.ResourceBanner 類是專門加載和打印字符 banner 的。它檢查配置文件 application.proeprties 是否有配置的 spring.banner.location 變量的值,這個(gè)值可用來指定要加載的文件,如果存在則構(gòu)建 ResourceBanner 對象。如果沒有配置變量,則還會檢查資源路徑下是否存在 banner.txt 文件,如果存在也會構(gòu)建 ResourceBanner 對象。

class SpringApplicationBannerPrinter {static final String BANNER_LOCATION_PROPERTY = 'spring.banner.location';static final String DEFAULT_BANNER_LOCATION = 'banner.txt';// 獲取 ResourceBanner 對象private Banner getTextBanner(Environment environment) {String location = environment.getProperty(BANNER_LOCATION_PROPERTY, DEFAULT_BANNER_LOCATION);Resource resource = this.resourceLoader.getResource(location);if (resource.exists()) {return new ResourceBanner(resource);}return null;}}

如果想要自定義 banner,我們一般在項(xiàng)目的 resources 資源目錄下創(chuàng)建 banner.txt 文件,然后在里面填入我們想要的打印的文字內(nèi)容即可。例如我在 banner.txt 文件中填充了 Chen Pi 內(nèi)容,然后啟動項(xiàng)目。

教你怎么用Springboot自定義Banner圖案教你怎么用Springboot自定義Banner圖案

六、SpringBootBanner

如果項(xiàng)目沒有設(shè)置以上兩種自定義的 banner(ImageBanner 和 ResourceBanner),則默認(rèn)情況下,會使用 SpringBootBanner 實(shí)現(xiàn)類打印 banner ,也就是我們啟動 Springboot 項(xiàng)目時(shí)在控制臺看到的打印 Spring 圖案。源碼如下:

package org.springframework.boot;import java.io.PrintStream;import org.springframework.boot.ansi.AnsiColor;import org.springframework.boot.ansi.AnsiOutput;import org.springframework.boot.ansi.AnsiStyle;import org.springframework.core.env.Environment;/** * Default Banner implementation which writes the ’Spring’ banner. */class SpringBootBanner implements Banner {// 這個(gè)就是我們啟動 Springboot 項(xiàng)目時(shí)在控制臺看到的圖案private static final String[] BANNER = { '', ' . ____ _ __ _ _',' / / ___’_ __ _ _(_)_ __ __ _ ', '( ( )___ | ’_ | ’_| | ’_ / _` | ',' / ___)| |_)| | | | | || (_| | ) ) ) )', ' ’ |____| .__|_| |_|_| |___, | / / / /',' =========|_|==============|___/=/_/_/_/' };private static final String SPRING_BOOT = ' :: Spring Boot :: ';private static final int STRAP_LINE_SIZE = 42;@Overridepublic 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();}}七、實(shí)現(xiàn) Banner 類

前面說我們可以實(shí)現(xiàn) Banner 類,重寫打印方法,實(shí)現(xiàn)自定義 banner 打印功能。

package com.chenpi;import java.io.PrintStream;import org.springframework.boot.Banner;import org.springframework.core.env.Environment;/** * @Description 自定義 Banner 實(shí)現(xiàn)類 * @Author Mr.nobody * @Date 2021/6/4 * @Version 1.0 */public class MyBanner implements Banner { @Override public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) { String banner = ' .__ .__ n' + ' ____ | |__ ____ ____ ______ |__|n' + '_/ ___| | _/ __ / ____ | |n' + ' ___| Y ___/| | | |_> > |n' + ' ___ >___| /___ >___| / | __/|__|n' + ' / / / / |__| '; out.println(banner); }}

創(chuàng)建自定義的 Banner 實(shí)現(xiàn)類對象,設(shè)置到 SpringApplication 類對象的 banner 屬性,最終這個(gè)屬性的值會會被賦值到 SpringApplicationBannerPrinter 對象的 fallbackBanner 屬性中,感興趣的可以啟動 debug 跟蹤下。

package com.chenpi;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringBootBannerApplication {public static void main(String[] args) {SpringApplication springApplication = new SpringApplication(SpringBootBannerApplication.class);// 設(shè)置自定義 BannerspringApplication.setBanner(new MyBanner());// 啟動 SpringBootspringApplication.run(args);}}八、Banner 樣式控制

文章一開始的佛祖圖形,你會發(fā)現(xiàn)是翠綠色的。其實(shí) Springboot 支持我們修改 banner 的顏色,字體斜體,粗體等樣式。SpringBoot 為我們提供了三個(gè)枚舉類來設(shè)定這些樣式。

1.AnsiColor:設(shè)定字符的前景色;參考 org.springframework.boot.ansi.AnsiColor 枚舉類。

2.AnsiBackground:設(shè)定字符的背景色;參考 org.springframework.boot.ansi.AnsiBackground 枚舉類。

3.AnsiStyle:設(shè)定字符的加粗、斜體、下劃線等等;參考 org.springframework.boot.ansi.AnsiStyle 枚舉類。

而且,在 banner.txt 文件中還可以引用一些全局變量,例如:

1.${spring-boot.version}:Spring Boot 版本號;

2.${spring-boot.formatted-version}:格式化后的 Spring Boot 版本號信息。

3.${application.version}:MANIFEST.MF 文件中的版本號;

4.${application.formatted-version}:格式化后的 MANIFEST.MF 文件中的版本號信息;

不僅如此,還可以引用我們在配置文件 application.properties 中定義的變量,例如在配置文件中定義了如下變量:

application.auth=chenpi

定義的 banner.txt 文件內(nèi)容如下:

${AnsiColor.BRIGHT_GREEN}// _ooOoo_ //// o8888888o //// 88' . '88 //// (| ^_^ |) //// O = /O //// ____/`---’____ //// .’ | |// `. //// / ||| : |||// //// / _||||| -:- |||||- //// | | - /// | | //// | _| ’’---/’’ | | //// .-__ `-` ___/-. / ////___`. .’ /--.-- `. . ___ //// .'' ’< `.____<|>_/___.’ >’''. //// | | : `- `.;` _ /`;.`/ - ` : | | //// `-. _ __ /__ _/ .-` / / //// ========`-.____`-.________/___.-`____.-’======== //// `=---=’ //// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//// 佛祖保佑 永不宕機(jī) 永無BUG //${AnsiColor.BRIGHT_CYAN}Application Version: ${application.version}${application.formatted-version}Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}By -- ${application.auth}

啟動項(xiàng)目,會在控制臺打印的 banner 如下:

教你怎么用Springboot自定義Banner圖案

九、Banner 模式

在 Banner 接口中有定義一個(gè)枚舉類,這個(gè)枚舉定義了配置 Banner 的可能枚舉值,如下:

@FunctionalInterfacepublic interface Banner {// 用于配置Banner的的枚舉值enum Mode {// 關(guān)閉 banner 打印OFF,// 打印 banner 到 控制臺CONSOLE,// 打印 banner 到日志文件LOG}}

所以我們可以選擇關(guān)閉 banner,banner 打印到控制臺還是日志文件,如下:

package com.chenpi;import org.springframework.boot.Banner.Mode;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringBootBannerApplication { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(SpringBootBannerApplication.class); // 關(guān)閉 banner springApplication.setBannerMode(Mode.OFF); // 啟動 SpringBoot springApplication.run(args); }}

也可以配置文件中設(shè)置此值,如下

spring.main.banner-mode=off

如果啟動類跟配置文件中都配置了對banner開關(guān)的設(shè)置,配置文件中設(shè)置的banner開關(guān)會優(yōu)先于啟動類中設(shè)置的開關(guān)。

十、banner 圖生成工具

可能有人會問佛祖的圖案怎么編輯出來的,其實(shí)網(wǎng)上有很多工具可以根據(jù)我們輸入的內(nèi)容或者圖片,個(gè)性化制作ASCII字符和圖案,推薦網(wǎng)址如下:

定制化 ASCII 字符:http://network-science.de/ascii/ 定制化 ASCII 圖片:https://www.degraeve.com/img2txt.php

到此這篇關(guān)于教你怎么用Springboot自定義Banner圖案的文章就介紹到這了,更多相關(guān)Springboot自定義Banner圖案內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
3d动漫精品啪啪1区2区免费| 91激情在线视频| 久久久亚洲一区| 亚洲色图在线看| 91在线porny国产在线看| 欧美日本免费一区二区三区| 天天操天天色综合| 亚洲精品1区2区| 欧美精品一区二区三区蜜臀 | 专区另类欧美日韩| 欧美成人在线免费观看| 91精品国产黑色紧身裤美女| 激情国产一区二区| 噜噜爱69成人精品| 亚洲美女淫视频| 欧美亚洲不卡| 久久午夜免费电影| 国产91富婆露脸刺激对白 | 日韩理论片网站| 激情欧美丁香| 最新不卡av在线| 在线欧美福利| 中文字幕一区二区三区精华液| 最新不卡av在线| 夜久久久久久| 亚洲一区影音先锋| 美女久久一区| 男女男精品视频网| 欧美丝袜丝交足nylons| 麻豆免费精品视频| 欧美日韩国产精选| 国产精品白丝jk黑袜喷水| 欧美精品vⅰdeose4hd| 国产综合久久久久久鬼色| 欧美精品一级二级三级| 国产激情91久久精品导航| 日韩片之四级片| 成人美女视频在线观看18| 欧美精品一区二区三| 欧美国产综合视频| 亚洲欧美日韩国产成人精品影院| 亚洲精品美女久久7777777| 亚洲综合免费观看高清在线观看| 久久激情久久| 蜜臂av日日欢夜夜爽一区| 欧美色精品在线视频| 国产精品18久久久久久久久久久久| 日韩欧美aaaaaa| 欧美激情性爽国产精品17p| 最近中文字幕一区二区三区| 国产日韩欧美三区| 日本欧美加勒比视频| 日本大香伊一区二区三区| 久久se精品一区精品二区| 日韩一卡二卡三卡| 欧美激情在线| 一个色妞综合视频在线观看| 91久久精品国产91性色tv| 国产成人在线看| 国产欧美日韩三区| 亚洲国产精品毛片| 五月天激情综合网| 欧美一级xxx| 欧美黄色精品| 亚洲18影院在线观看| 中文日韩在线| 久久精品国产77777蜜臀| 欧美三级欧美一级| 成人免费视频caoporn| 国产精品久久久久久久第一福利| 99riav国产精品| 麻豆高清免费国产一区| 精品盗摄一区二区三区| 亚洲精品社区| 免费在线观看一区二区三区| 精品日韩av一区二区| 亚洲国产精品一区二区第一页| 亚洲成人激情社区| 日韩欧美一级精品久久| 亚洲国产日韩在线| 免费在线观看不卡| 国产日韩欧美制服另类| 国产美女在线精品免费观看| 国产麻豆精品久久一二三| 中文字幕免费一区| 色琪琪一区二区三区亚洲区| av欧美精品.com| 国产日韩一区二区三区| 国产精品一区一区| 亚洲视频一区二区在线观看| 欧美三级中文字幕| 国产在线精品二区| 蜜臀久久久99精品久久久久久| 久久精品欧美日韩精品| 久久亚裔精品欧美| 99精品视频一区二区| 亚洲成av人片观看| 精品粉嫩超白一线天av| 国产欧美亚洲一区| 国产精品亚洲专一区二区三区| 中文字幕一区二区三区蜜月| 欧美日韩国产另类不卡| 亚洲夫妻自拍| 国产精品一级黄| 亚洲综合激情另类小说区| 欧美一区二区日韩一区二区| 夜夜爽av福利精品导航 | 亚洲一区二区在线免费看| 欧美大片在线观看一区二区| 国产亚洲欧美一区二区| 国产成人av一区二区三区在线| 日韩一区在线播放| 91麻豆精品国产91久久久久| 国产日韩亚洲欧美精品| 99国产欧美另类久久久精品| 日日摸夜夜添夜夜添国产精品 | 欧美日韩一区二区在线观看视频| 91久久综合| 99久久精品国产一区二区三区| 日本欧美一区二区在线观看| 最近中文字幕一区二区三区| 精品久久久久久最新网址| 久久久久在线| 亚洲国产精品一区二区第一页| 成人一级视频在线观看| 麻豆一区二区三| 亚洲成人黄色小说| 亚洲天堂福利av| 国产亚洲综合在线| 欧美一级搡bbbb搡bbbb| 日本高清免费不卡视频| 国产欧美大片| 欧美日韩ab| 懂色av中文一区二区三区| 日本sm残虐另类| 国产精品久久毛片| 制服丝袜成人动漫| 亚洲伊人网站| 色综合久久中文字幕| 蜜桃av一区二区| 亚洲高清视频在线| 国产精品国产三级国产三级人妇 | 欧美激情中文不卡| 日韩亚洲欧美高清| 在线一区二区三区| 国产一区二区高清| 欧美喷水视频| 99久久99久久精品免费观看| 韩国成人在线视频| 日韩成人免费在线| 亚洲一区二区欧美激情| 国产精品久久久久久一区二区三区| 欧美精品一区二区三区在线播放| 欧美一区二区日韩| 欧美老肥妇做.爰bbww| 巨乳诱惑日韩免费av| 亚洲一区二区三区精品视频| 一区福利视频| 欧美久色视频| bt欧美亚洲午夜电影天堂| 国产成人免费av在线| 国产综合久久久久久久久久久久| 免费精品99久久国产综合精品| 亚洲国产wwwccc36天堂| 一区二区三区久久| 一区二区三区四区视频精品免费 | 在线观看一区欧美| 国内揄拍国内精品久久| 色综合久久中文字幕综合网| 99久久精品免费看国产免费软件| 国产成人精品1024| 国产成人免费视频网站 | 日韩精品一区二区三区四区视频| av亚洲产国偷v产偷v自拍| 成人一区在线看| 成人av小说网| 不卡电影一区二区三区| 成人性生交大片免费看中文| 丰满放荡岳乱妇91ww| 高清视频一区二区| 成人av电影在线观看| 成人精品一区二区三区四区| 成人97人人超碰人人99| 成人av电影在线| 91视频.com| 国产一区二区在线观看免费播放 | 欧美日韩三级在线| 欧美日产在线观看| 欧美剧在线免费观看网站| 884aa四虎影成人精品一区| 777午夜精品视频在线播放| 91精品国产综合久久久久久漫画 | 国产专区综合网| 国产成人自拍高清视频在线免费播放| 国产一区二区三区观看| 成人午夜电影久久影院| 懂色av一区二区三区免费看| 成人av高清在线| 欧美日韩国产综合网| 亚洲午夜在线观看|