服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - Java教程 - 详解SpringBoot基础之banner玩法解析

详解SpringBoot基础之banner玩法解析

2021-07-29 11:57二师兄 Java教程

SpringBoot项目启动时会在控制台打印一个默认的启动图案,这个图案就是我们要讲的banner,这篇文章主要介绍了SpringBoot基础之banner玩法解析,感兴趣的小伙伴们可以参考一下

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

详解SpringBoot基础之banner玩法解析

制作自己的banner

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

第二步:访问网站 http://patorjk.com/software/taag,在网站“type something ”处输入想要制作的单词(比如:hello world),会生成对应的字符。也可以通过其他参数来调整字符的样式。

详解SpringBoot基础之banner玩法解析

复制生成的字符,粘贴到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

延伸 · 阅读

精彩推荐
  • Java教程Java 数组详解及示例代码

    Java 数组详解及示例代码

    本文主要介绍Java 数组的知识,这里整理了数组所有操作方法,并一一列举,有学习的朋友可以参考下 ...

    wangguo4162020-06-11
  • Java教程10分钟带你理解Java中的反射

    10分钟带你理解Java中的反射

    反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这篇文章带大家十分钟快速理解Java中的反射,有需要的可以参考借鉴。 ...

    daisy1942020-06-08
  • Java教程java.lang.ExceptionInInitializerError异常的解决方法

    java.lang.ExceptionInInitializerError异常的解决方法

    这篇文章主要为大家详细介绍了java.lang.ExceptionInInitializerError异常的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    面条啊Andrew8722021-01-28
  • Java教程Java中的main函数的详细介绍

    Java中的main函数的详细介绍

    这篇文章主要介绍了Java中的main函数的详细介绍的相关资料,main()函数在java程序中必出现的函数,这里就讲解下使用方法,需要的朋友可以参考下...

    rickiyeat7422021-01-10
  • Java教程SpringBoot配置文件的加载位置实例详解

    SpringBoot配置文件的加载位置实例详解

    springboot采纳了建立生产就绪spring应用程序的观点。 在一些特殊的情况下,我们需要做修改一些配置,或者需要有自己的配置属性。接下来通过本文给大家...

    熊熊爱绵羊7882021-05-30
  • Java教程Spring的AOP极简入门

    Spring的AOP极简入门

    今天小编就为大家分享一篇关于Spring的AOP极简入门,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    李灿辉10932021-06-30
  • Java教程Mybatis传递多个参数进行SQL查询的用法

    Mybatis传递多个参数进行SQL查询的用法

    本文给大家介绍Mybatis传递多个参数进行SQL查询的用法的相关知识,本文还给大家介绍了mybatis通过Map传递多个参数和JavaBean传递多个参数,本文介绍的非常详...

    zifangsky4012020-05-23
  • Java教程详解Java中int和Integer的区别

    详解Java中int和Integer的区别

    这篇文章主要介绍了Java中int和Integer的区别文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小...

    Kluadias5722021-07-29