Spring Boot 教程

自定义 Banner

banner(/ˈbænər/) 意思为“横幅、标语”。横幅是 Spring Boot 应用的特色,它在应用每次启动时在控制台打印出一个字符图案,可以显示应用名称、简称以及版本信息。例如:

推荐一个字符图生成网站:http://patorjk.com/software/taag/

自定义Banner

通过在 classpath 下添加一个 banner.txt 或在 application.properties / application.yml 配置中设置 banner.location 来指定相应的 banner 文件可以改变启动过程中打印的 banner。如果这个文件有特殊的编码,你可以使用 banner.encoding 设置它(默认为 UTF-8)。除了文本文件,你也可以添加一个 banner.gif ,banner.jpg 或 banner.png 图片,或设置 banner.image.location 属性。图片会转换为字符画(ASCII art)形式,并在所有文本 banner 上方显示。 

在 banner.txt 中可以使用如下占位符:

  • ${application.version}:MANIFEST.MF 中声明的应用版本号,例如:Implementation-Version: 1.0 会打印 1.0

  • ${application.formatted-version}:MANIFEST.MF 中声明的被格式化后的应用版本号(被括号包裹且以 v 作为前缀),用于显示,例如:( v1.0 )

  • ${spring-boot.version}:当前Spring Boot的版本号,例如:1.4.1.RELEASE

  • ${spring-boot.formatted-version}:当前 Spring Boot 被格式化后的版本号(被括号包裹且以v作为前缀), 用于显示,例如:(v1.4.1.RELEASE)

  • ${Ansi.NAME} (或 ${AnsiColor.NAME}, ${AnsiBackground.NAME}, ${AnsiStyle.NAME}):NAME 代表一种 ANSI 编码,具体详情查看 AnsiPropertySource

  • ${application.title}:MANIFEST.MF 中声明的应用 title,例如:Implementation-Title: MyApp 会打印 MyApp

注意:

如果想以编程的方式产生一个 banner,可以使用 SpringBootApplication.setBanner(…) 方法,并实现 org.springframework.boot.Banner 接口的 printBanner() 方法。你也可以使用spring.main.banner-mode 属性决定将 banner 打印到何处:

  • Banner.Mode.OFF:禁止 banner 打印

  • Banner.Mode.CONSOLE:将 banner 打印到 System.out,即控制台

  • Banner.Mode.LOG:将 banner 打印到日志文件

Banner 接口

用于以编程方式编写 banner 的接口类,该接口仅仅只有一个 printBanner(Environment environment, Class<?> sourceClass, PrintStream out) 方法,用于将 banner 打印到指定的流。其中参数:

  • environment:Spring Environment 对象,可以从该对象中获取属性值

  • sourceClass:应用程序的 Class 对象

  • out:输出打印流

Spring Boot 提供了一下几个 Banner 接口的默认实现:

  • ImageBanner:该类将图片转换为字符画(ASCII art),然后打印到指定的输出流

  • SpringBootBanner:该类是 Spring Boot 提供的默认 Banner,当你没有配置任何 Banner 的时候将会执行该类,该类将在控制台输出“Spring Boot”字符串

  • ResourceBanner:该类实现从 Text 文件读取 Banner 字符串,然后将该字符串打印到输出流

自定义 Banner

如果你需要自定义 Banner,需要实现 Banner 接口,重写 printBanner() 方法。如下:

import org.springframework.boot.Banner;
import org.springframework.core.env.Environment;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 自定义自己的 Banner
 */
public class MyBanner implements Banner {

    private static final String[] BANNER = {
            "  _    ___   __ _____ _______ _____  _______      ________",
            " | |  | \\ \\ / // ____|__   __|  __ \\|_   _\\ \\    / /  ____|",
            " | |__| |\\ V /| (___    | |  | |__) | | |  \\ \\  / /| |__",
            " |  __  | > <  \\___ \\   | |  |  _  /  | |   \\ \\/ / |  __|",
            " | |  | |/ . \\ ____) |  | |  | | \\ \\ _| |_   \\  /  | |____",
            " |_|  |_/_/ \\_\\_____/   |_|  |_|  \\_\\_____|   \\/   |______|"
    };

    @Override
    public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
        for(String line : BANNER) {
            out.println(line);
        }
        // 当前时间
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        out.println("当前时间:" + dateFormat.format(new Date()));
        out.println("当前JDK版本:" + System.getProperty("java.version"));
        out.flush();
    }

}

实现好自己的 Banner 类后,还需要将它设置到 Spring Boot,如下:

import org.springframework.boot.Banner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class SpringbootBannerDemo4Application {

    public static void main(String[] args) {
        new SpringApplicationBuilder(SpringbootBannerDemo4Application.class)
                .banner(new MyBanner())
                .bannerMode(Banner.Mode.CONSOLE).run(args);
    }

}

示例代码

Spring Boot 定制自己的 Banner

Spring Boot 通过代码动态生成 Banner

Spring Boot 设置 Banner 颜色

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号