详解SpringBoot基础之banner玩法解析

 更新时间:2019年04月08日 10:10:26   作者:二师兄  
SpringBoot项目启动时会在控制台打印一个默认的启动图案,这个图案就是我们要讲的banner,这篇文章主要介绍了SpringBoot基础之banner玩法解析,感兴趣的小伙伴们可以参考一下

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是如下图形:

${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接口。

@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。看一下源代码:

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对象,然后设置相应的参数。示例代码:

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已经帮我们预制好了相应的参数。

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的打印。上面示例中已经有所展示。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • springboot访问template下的html页面的实现配置

    springboot访问template下的html页面的实现配置

    这篇文章主要介绍了springboot访问template下的html页面的实现配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java日常练习题,每天进步一点点(4)

    Java日常练习题,每天进步一点点(4)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • 图文教程教你IDEA中的Spring环境搭建+简单入门

    图文教程教你IDEA中的Spring环境搭建+简单入门

    这篇文章主要介绍了图文教程教你IDEA中的Spring环境搭建+简单入门,Spring的环境搭建使用Maven更加方便,需要的朋友可以参考下
    2023-03-03
  • Java使用百度AI接口实现智能机器人对话系统

    Java使用百度AI接口实现智能机器人对话系统

    AI已经在各行各业中广泛应用,助力于各式各样的业务,而在机器人对话中,我们可以通过利用百度AI中的自然语言处理、问答知识图谱等技术,使机器人可以更加智能化、自然化的为用户服务,本文介绍Java利用百度AI接口实现智能机器人对话系统
    2024-01-01
  • 详解java google Thumbnails 图片处理

    详解java google Thumbnails 图片处理

    这篇文章主要介绍了java google Thumbnails 图片处理的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • spring boot空属性赋值问题与aspect日志实现方法

    spring boot空属性赋值问题与aspect日志实现方法

    这篇文章主要介绍了spring boot空属性赋值问题与aspect日志实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Spring中@Configuration注解的Full模式和Lite模式详解

    Spring中@Configuration注解的Full模式和Lite模式详解

    这篇文章主要介绍了Spring中@Configuration注解的Full模式和Lite模式详解,准确来说,Full 模式和 Lite 模式其实 Spring 容器在处理 Bean 时的两种不同行为,这两种不同的模式在使用时候的表现完全不同,今天就来和各位小伙伴捋一捋这两种模式,需要的朋友可以参考下
    2023-09-09
  • ThreadLocal线程在Java框架中的应用及原理深入理解

    ThreadLocal线程在Java框架中的应用及原理深入理解

    这篇文章主要介绍了ThreadLocal在Java框架中的应用及原理深入理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Java实现stream的三个常用方式(toMap,groupingBy,findFirst)

    Java实现stream的三个常用方式(toMap,groupingBy,findFirst)

    本文主要介绍了Java实现stream的三个常用方式,主要包括toMap,groupingBy,findFirst,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Maven 继承父工程时的relativePath标签详细解析

    Maven 继承父工程时的relativePath标签详细解析

    这篇文章主要介绍了Maven 继承父工程时的relativePath标签解析,通过本文学习你需要注意子模块想要用父模块pom中的版本,请注意配置relativePath属性,需要的朋友可以参考下
    2022-12-12

最新评论