Spring Boot自定义Banner

Posted 这瓜保熟么

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot自定义Banner相关的知识,希望对你有一定的参考价值。

我们在启动 SpringBoot 时,控制台会打印 SpringBoot Logo 以及版本信息;这个操作是 SpringBoot 固定的还是可配置(自定义)的?

  .   ____          _            __ _ _
 /\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\
( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\
 \\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::       (v1.5.12.RELEASE)

带着这个疑问,翻阅了一下源码发现这个操作还真可以自定义,SpringBoot 有一个接口 org.springframework.boot.Banner 是专门来做这个操作的。我们可以实现这个接口来自定义打印 Banner 信息;但是不推荐自己去写,因为这个不是什么重要的功能,没必要把时间花在这上面,既然 SpringBoot 提供了这个功能,肯定为我们实现了。

  • org.springframework.boot.ResourceBanner

    文本格式,SpringBoot 会读取配置项banner.txtbanner.location,从配置项中获取真实的文件地址;如果配置中没有配置,会把配置项作为文件去加载;

  • org.springframework.boot.ImageBanner

    图片格式,SpringBoot 加载配置项banner.image.location,从配置项中获取真实的路径,SpringBoot 会根据配置项的路径加载文件。
    如果没有配置banner.image.location,转而依次加载banner.gifbanner.jpgbanner.png这三个中存在的文件;

如果上面两种都没有配置,SpringBoot 就会加载默认的 Banner;也就是文章开头介绍的方式。

接下来我会介绍在文本格式(ResourceBanner);

环境:
操作系统:MacOS
SpringBoot版本:1.5.12.RELEASE

创建启动类:
src/main/java/{package}/Application.java

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        // 启动颜色格式化
       // 这不是唯一启动颜色格式的方式,有兴趣的同学可以查看源码
       /**
         * 1. AnsiOutput.setEnabled(AnsiOutput.Enabled.ALWAYS);
         * 2. 在`src/main/resources`目录下新建文件`application.properties`,
         *    内容为:`spring.output.ansi.enabled=always`
         * 
         * 重要:如果配置第二种方式,第一种方式就不会起作用
         */
        AnsiOutput.setEnabled(AnsiOutput.Enabled.ALWAYS);
        new SpringApplicationBuilder(Application.class)//
                .main(SpringVersion.class) // 这个是为了可以加载 Spring 版本
                .bannerMode(Banner.Mode.CONSOLE)// 控制台打印
                .run(args);
    }
}

创建Banner文件
src/main/resource/banner.txt

${AnsiColor.BRIGHT_YELLOW}

//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\\  =  /O                              //
//                      ____/`---'\\____                           //
//                    .'  \\\\|     |//  `.                         //
//                   /  \\\\|||  :  |||//  \\                        //
//                  /  _||||| -:- |||||-  \\                       //
//                  |   | \\\\\\  -  /// |   |                       //
//                  | \\_|  ''\\---/''  |   |                       //
//                  \\  .-\\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\\  `. . ___                     //
//              ."" '<  `.___\\_<|>_/___.'  >'"".                  //
//            | | :  `- \\`.;`\\ _ /`;.`/ - ` : | |                 //
//            \\  \\ `-.   \\_ __\\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕机     永无BUG                  //

${AnsiColor.BRIGHT_RED}
Application Version: ${application.version}${application.formatted-version}
Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}

从上面的内容中可以看到,还使用了一些属性设置:

  • ${AnsiColor.BRIGHT_RED}:设置控制台中输出内容的颜色,可以自定义,具体参考org.springframework.boot.ansi.AnsiColor
  • ${application.version}:用来获取MANIFEST.MF文件中的版本号,这就是为什么要在Application.java中指定 SpringVersion.class
  • {application.formatted-version}:格式化后的{application.version}版本信息
  • ${spring-boot.version}:Spring Boot的版本号
  • {spring-boot.formatted-version}:格式化后的{spring-boot.version}版本信息

效果

从效果图看,我们定义的文本最后被上了颜色,颜色是如何转换的,可以参考:颜色特效

生成工具

如果让我们手工的来编辑这些字符画,显然是一件非常困难的差事。所以,我们可以借助下面这些工具,轻松地根据文字或图片来生成用于Banner输出的字符画。

banner在线生成工具

https://www.bootschool.net/ascii

http://patorjk.com/software/taag/(我比较喜欢用这个)

以上是关于Spring Boot自定义Banner的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot - 自定义 Banner 图案

Spring Boot中的一些常用配置介绍!

Spring Boot# Could not transfer artifact..maven导包问题查看和修改内置Tomcat版本自定义启动Banner

Spring Boot中的一些常用配置介绍!

Spring boot Banner和icon

Spring Boot 常用配置