好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

详解SpringBoot基础之banner玩法解析

springboot项目启动时会在控制台打印一个默认的启动图案,这个图案就是我们要讲的 banner 。看似简单的banner,我们能够对它做些什么呢?本篇文章就带大家深入了解一下banner的使用(版本:springboot2.1.4)。

制作自己的banner

第一步:在src/main/resources下面创建banner.txt。

第二步:访问网站  http://patorjk测试数据/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://HdhCmsTestchoupangxia测试数据/topic/detail/137

查看更多关于详解SpringBoot基础之banner玩法解析的详细内容...

  阅读:18次