springboot項目啟動時會在控制臺打印一個默認的啟動圖案,這個圖案就是我們要講的banner。看似簡單的banner,我們能夠對它做些什么呢?本篇文章就帶大家深入了解一下banner的使用(版本:springboot2.1.4)。
制作自己的banner
第一步:在src/main/resources下面創建banner.txt。
第二步:訪問網站 http://patorjk.com/software/taag,在網站“type something ”處輸入想要制作的單詞(比如:hello world),會生成對應的字符。也可以通過其他參數來調整字符的樣式。
復制生成的字符,粘貼到banner.txt,再次啟動程序便可以打印出指定的banner了。
個人比較喜歡的banner是如下圖形:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
${ansicolor.bright_yellow} //////////////////////////////////////////////////////////////////// // _ooooo_ // // o8888888o // // 88" . "88 // // (| ^_^ |) // // o\ = /o // // ____/`---'\____ // // .' \\| |// `. // // / \\||| : |||// \ // // / _||||| -:- |||||- \ // // | | \\\ - /// | | // // | \_| ''\---/'' | | // // \ .-\__ `-` ___/-. / // // ___`. .' /--.--\ `. . ___ // // ."" '< `.___\_<|>_/___.' >'"". // // | | : `- \`.;`\ _ /`;.`/ - ` : | | // // \ \ `-. \_ __\ /__ _/ .-` / / // // ========`-.____`-.___\_____/___.-`____.-'======== // // `=---=' // // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // // 佛祖保佑 永不宕機 永無bug // //////////////////////////////////////////////////////////////////// |
在新版本的springboot中,支持了gif、jpg和png的圖片形式的banner打印。當然,并不會把圖片直接打印在控制臺,而是將其像素解析轉換成assii編碼之后打印。
對于gif動圖,會把動圖的每個圖片都打印出來,如果動圖比較大,打印時間較長。可以嘗試一下,但建議不要使用gif。
在banner.txt中,還可以進行一些設置,比如上圖中的${ansicolor.bright_yellow}。
- ansicolor.bright_red:設置控制臺中輸出內容的顏色
- 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圖片時,默認圖形存儲在哪里了呢?下面我們了解一下banner接口。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@functionalinterface public interface banner { // 打印banner void printbanner(environment environment, class <?> sourceclass, printstream out); enum mode { // 關閉 off, // 控制臺 console, // 日志文件 log } } |
在banner接口中提供了打印banner的方法和一個枚舉類。枚舉類有三個值:off、console、log,用來控制banner的打印,分別對應:關閉打印、控制臺打印和日志打印。
banner接口的實現主要有resourcebanner、imagebanner、springbootbanner和其他內部類的實現。其中上面看到的圖形的打印就來自于springbootbanner。看一下源代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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的方法實現中,首先打印了默認的banner字符串數組,然后將spring_boot和版本信息進行拼接打印。
banner的參數設置
banner的參數設定可以通過兩種形式,一種是代碼的形式,一種是配置文件的形式。
使用代碼的形式首先要將默認的main方法進行改造,手動創建springapplication對象,然后設置相應的參數。示例代碼:
1
2
3
4
5
6
7
|
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); } |
通過配置文件設置就比較簡單,直接在application.properties中進行配置,springboot已經幫我們預制好了相應的參數。
1
2
3
4
5
6
7
8
|
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代替,將其值設置為off即可關閉banner的打印。
引入文本banner通過spring.banner.location來指定,引入圖片相關的banner需要通過spring.banner.image.location來指定路徑,否則會出現亂碼情況。
如果不想顯示banner,可以在代碼中通過setbannermode(banner.mode.off)方法或通過參數配置spring.main.banner-mode=off來關閉banner的打印。上面示例中已經有所展示。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.choupangxia.com/topic/detail/137