日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

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

我們在啟動 Spring Boot 項目時,默認會在控制臺打印 Spring logo 和版本等信息,如下:

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

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

比如,自定義一個 banner 之后,項目啟動控制臺打印如下所示:

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

二、實現原理

Spring Boot 有一個接口 org.springframework.boot.Banner 專門實現這個操作。要想自定義打印 banner ,只要自定義一個類實現這個接口,重寫 printBanner 方法進行打印即可。Springboot 項目啟動時,會創建我們的實現類對象,并調用對象的 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 {// 關閉 banner 打印OFF,// 打印 banner 到 控制臺CONSOLE,// 打印 banner 到日志文件LOG}}三、默認 Banner 實現類

Springboot 已經有幾個自帶的 Banner 實現類,Springboot 啟動時會根據條件選擇不同的 Banner 實現類進行打印 banner 信息。主要是 ImageBanner,ResourceBanner,SpringBootBanner 這三個實現類。

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

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

3.否則,則使用默認的 SpringBootBanner 實現類來打印 banner,也就是我們經常看到 Spring 圖案。

// 獲取可用的 Banner 實現類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 實現類return DEFAULT_BANNER;}四、ImageBanner

org.springframework.boot.ImageBanner 類是專門加載和打印圖片 banner 的。它檢查配置文件 application.proeprties 是否有配置的 spring.banner.image.location 變量的值,這個值可用來指定要加載的圖片,如果存在則構建 ImageBanner 對象。如果沒有配置變量,則還會檢查 Classpath 下是否存在以 banner 開頭,以 .gif,.jpg,.png 結尾的圖片文件,如果有也會構建 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 指定的文件,文件存在則構建 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 變量的值,這個值可用來指定要加載的文件,如果存在則構建 ResourceBanner 對象。如果沒有配置變量,則還會檢查資源路徑下是否存在 banner.txt 文件,如果存在也會構建 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,我們一般在項目的 resources 資源目錄下創建 banner.txt 文件,然后在里面填入我們想要的打印的文字內容即可。例如我在 banner.txt 文件中填充了 Chen Pi 內容,然后啟動項目。

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

六、SpringBootBanner

如果項目沒有設置以上兩種自定義的 banner(ImageBanner 和 ResourceBanner),則默認情況下,會使用 SpringBootBanner 實現類打印 banner ,也就是我們啟動 Springboot 項目時在控制臺看到的打印 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 {// 這個就是我們啟動 Springboot 項目時在控制臺看到的圖案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();}}七、實現 Banner 類

前面說我們可以實現 Banner 類,重寫打印方法,實現自定義 banner 打印功能。

package com.chenpi;import java.io.PrintStream;import org.springframework.boot.Banner;import org.springframework.core.env.Environment;/** * @Description 自定義 Banner 實現類 * @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); }}

創建自定義的 Banner 實現類對象,設置到 SpringApplication 類對象的 banner 屬性,最終這個屬性的值會會被賦值到 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);// 設置自定義 BannerspringApplication.setBanner(new MyBanner());// 啟動 SpringBootspringApplication.run(args);}}八、Banner 樣式控制

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

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

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

3.AnsiStyle:設定字符的加粗、斜體、下劃線等等;參考 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 文件內容如下:

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

啟動項目,會在控制臺打印的 banner 如下:

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

九、Banner 模式

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

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

所以我們可以選擇關閉 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); // 關閉 banner springApplication.setBannerMode(Mode.OFF); // 啟動 SpringBoot springApplication.run(args); }}

也可以配置文件中設置此值,如下

spring.main.banner-mode=off

如果啟動類跟配置文件中都配置了對banner開關的設置,配置文件中設置的banner開關會優先于啟動類中設置的開關。

十、banner 圖生成工具

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

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

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

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
黄色亚洲精品| 亚久久调教视频| 国产精品久久久久毛片大屁完整版| 中日韩男男gay无套| 夜夜嗨一区二区| 免费欧美日韩| 日韩在线网址| 美女性感视频久久| 国产精品久久久久蜜臀 | 国产精品原创| 91亚洲成人| 久久国产亚洲精品| 99香蕉国产精品偷在线观看 | 久久黄色影院| 免费人成黄页网站在线一区二区| 日本不卡高清| 国产成人精品一区二区免费看京| 午夜精品久久久久久久久久蜜桃| 精品一区免费| 久久激情五月激情| 日韩精品影视| 亚洲综合中文| 欧美三区不卡| 久久美女精品| 国产精品xxx在线观看| 国产精品久久久久av电视剧| 亚洲一二av| 久久青草久久| 里番精品3d一二三区| 尤物精品在线| 成人台湾亚洲精品一区二区| 丝袜诱惑制服诱惑色一区在线观看 | 久久亚洲黄色| 亚洲综合日本| 天堂日韩电影| 欧美激情99| 中文字幕亚洲精品乱码| 四虎成人av| 国产欧美大片| 蜜臀av在线播放一区二区三区| 国产一区2区| 国产精品综合| 日韩精品一区二区三区中文在线| 日韩中文在线播放| 久久精品国产99国产精品| 日本免费新一区视频| 国产在线日韩| 久久99国产精品视频| 日韩精品一区二区三区中文| 欧美天堂亚洲电影院在线观看| 国产福利片在线观看| 国产激情一区| 国产日韩在线观看视频| 深夜福利亚洲| 日韩精品免费观看视频| 日韩一区二区三区免费视频| 六月天综合网| 日韩在线a电影| 一级成人国产| 青草国产精品| 国产精品久久| 国产亚洲一卡2卡3卡4卡新区| 国产精品日韩| 蜜臀a∨国产成人精品| 免费在线成人网| 久久国产精品免费精品3p| 国产精品色在线网站| 麻豆精品国产91久久久久久| 久久精品女人| 国产资源在线观看入口av| 日本午夜大片a在线观看| 亚洲www啪成人一区二区| 91精品精品| 日av在线不卡| 国产精品一在线观看| 成午夜精品一区二区三区软件| 久久只有精品| 午夜av不卡| 亚洲一区二区三区免费在线观看| 老司机精品久久| 国产精品xxxav免费视频| 欧美日韩免费看片| 中文无码久久精品| 久久精品福利| 久久夜色精品| 麻豆精品在线播放| 在线国产一区| 国产欧美一级| 欧美特黄一区| 久久97久久97精品免视看秋霞| 色88888久久久久久影院| 国产亚洲午夜| 美女av一区| 日本在线不卡视频一二三区| 欧美激情福利| 亚洲免费专区| 久久久久久美女精品| 国产伦乱精品| 免费观看日韩电影| 日韩欧美在线中字| 欧美有码在线| 在线一区免费观看| 超碰成人av| 欧美激情亚洲| 亚洲精品裸体| 视频一区中文字幕国产| 午夜精品久久久久久久久久蜜桃| 在线日韩成人| 亚洲一区网站| 91精品国产福利在线观看麻豆| 国产精品xxx在线观看| 亚洲乱码一区| 亚洲一区区二区| 国产一区欧美| 91精品一区国产高清在线gif| 欧美aⅴ一区二区三区视频| 亚洲人亚洲人色久| 石原莉奈在线亚洲三区| 欧美成人亚洲| 国产亚洲一区二区手机在线观看 | 麻豆精品在线播放| 国产亚洲高清在线观看| 亚洲精品无吗| 亚洲18在线| 亚洲精选成人| 日韩欧美久久| 国产欧美一区二区三区精品观看 | 日韩免费久久| 美女网站视频一区| 亚洲成av在线| 999国产精品永久免费视频app| 一区二区三区四区日本视频| 国产精品亚洲欧美日韩一区在线| 97se亚洲| 国产一区二区三区日韩精品| 久久精品伊人| 欧美高清一区| 日本欧洲一区二区| 欧美日韩1区| 成人午夜网址| 欧美午夜不卡| 欧美日一区二区在线观看| 久久精品国产久精国产| 在线一区视频观看| aⅴ色国产欧美| 日韩精品社区| 中文字幕在线看片| 米奇777超碰欧美日韩亚洲| 夜夜嗨av一区二区三区网站四季av| 丝袜美腿一区二区三区| 欧美激情亚洲| 欧美特黄一区| 国产精品mv在线观看| 色吊丝一区二区| 日韩高清欧美激情| 日韩电影免费在线观看| 久久午夜精品一区二区| 免费在线播放第一区高清av| 激情欧美日韩一区| 国产情侣久久| 亚洲在线成人| 蜜臀久久精品| 天堂精品久久久久| 天堂中文av在线资源库| 日韩精品久久久久久| 亚洲调教视频在线观看| 国产精品一二| 久色成人在线| 欧美日韩在线二区| 国产精品久久| 亚洲久久一区| 另类亚洲自拍| 91精品99| 欧美日韩视频网站| 久久精品国产99国产| 欧美一区久久| 中文字幕中文字幕精品| 久久久久美女| 国产色播av在线| 国模大尺度视频一区二区| 青青青国产精品| 综合国产精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲成人不卡| av中文资源在线资源免费观看| 国产精品xxx在线观看| 日韩精选在线| 欧美亚洲免费| 欧美日韩一区二区三区四区在线观看 | 狠狠久久伊人中文字幕| 国产精品最新| 国产精品99久久免费观看| 日本不卡视频在线观看| 蜜桃视频第一区免费观看| 欧美日韩中文一区二区| 亚洲二区视频| 免费精品国产的网站免费观看| 三上悠亚国产精品一区二区三区| 在线人成日本视频| 日韩大片免费观看|