Spring Boot Banner自定义

好的,各位观众老爷们,欢迎来到今天的“Spring Boot Banner 魔法秀”!♂ 今天咱们不讲枯燥的代码,咱们聊聊怎么让你的 Spring Boot 应用启动时,不再是那个平平无奇的 “Spring” 大字,而是像孔雀开屏一样,展示出你独特的个性和风采!

开场白:Banner,不止是启动画面,更是你的品牌名片!

想象一下,你辛辛苦苦开发的 Spring Boot 应用,终于要上线了。用户满怀期待地启动它,结果… 屏幕上蹦出来一个默认的 Spring Boot Banner,简直就像精心打扮参加派对,结果发现大家都穿了同款礼服,瞬间失去了灵魂!

所以,自定义 Banner 不仅仅是为了美观,更是为了:

  • 品牌展示: 在启动时就告诉用户,这是谁家的应用,彰显你的品牌形象。
  • 信息传递: 可以展示应用的版本号、运行环境、开发者信息等等,方便排错和维护。
  • 个性表达: 让你的应用与众不同,彰显你的技术实力和艺术品味。
  • 提升用户体验: 一个漂亮的 Banner,能让用户在启动时心情愉悦,增加对应用的好感。

第一幕:默认 Banner 的“前世今生”

Spring Boot 默认的 Banner 其实是个纯文本文件,名为 banner.txt,位于 src/main/resources 目录下。如果你没有手动创建,Spring Boot 会自动生成一个。

这个默认 Banner 长什么样呢? 就像一个穿着朴素,但是又有点呆萌的小伙子:

  .   ____          _            __ _ _
 /\ / ___'_ __ _   _(_) __ _   ___  | | | |
( ( )___ | '_ | '_| | |/ _` | / __| | | | |
 \/  ___)| |_)| | | | | (_| | \__ \ | | | |
  '  |____| .__|_| |_|_|\__,_| |___/ |_|_|_|
 =========|_|==============|===========
 :: Spring Boot ::                (v2.7.17)

它用 ASCII 字符拼出了 Spring 的 logo,还显示了 Spring Boot 的版本号。虽然简单,但也算尽职尽责了。

第二幕:自定义 Banner 的N种姿势

好了,了解了默认 Banner,接下来咱们就要开始“整容”了!让它改头换面,变成你想要的模样。

姿势一:替换 banner.txt

这是最简单粗暴,也是最常用的方法。直接在 src/main/resources 目录下创建一个 banner.txt 文件,然后把你精心设计的 ASCII 艺术作品放进去就行了。

  • ASCII 艺术生成器: 如果你不会画 ASCII 艺术,没关系,网上有很多在线生成器,比如:

    你可以输入文字,选择字体,然后生成漂亮的 ASCII 艺术。

  • 示例: 比如,我想做一个显示我的应用名称 “Super App” 的 Banner,可以这样:

     _   _      _ _        __        __    _
    | | | | ___| | | ___   / _| ___  / _|__| |
    | |_| |/ _ \ | |/ _ \ | |_ / _ \| |_/ _| |
    |  _  |  __/ | |  __/ |  _| (_) |  _| (_| |
    |_| |_|\___|_|_|\___| |_|  \___/|_|  \__| |

    把这段代码复制到 banner.txt 中,重新启动应用,看看效果!

姿势二:使用图片生成 Banner

如果你觉得 ASCII 艺术太 low,想用图片来展示 Banner,也是可以的!但是需要一些额外的操作。

  1. 引入依赖:pom.xml 文件中添加以下依赖:

    <dependency>
        <groupId>com.github.lalyos</groupId>
        <artifactId>jfiglet</artifactId>
        <version>1.0.2</version>
    </dependency>
  2. 创建 banner.txtbanner.txt 文件中,使用 ${Ansi.XXX} 来控制颜色和样式。例如:

    ${AnsiColor.BRIGHT_RED}
     _   _      _ _        __        __    _
    | | | | ___| | | ___   / _| ___  / _|__| |
    | |_| |/ _ \ | |/ _ \ | |_ / _ \| |_/ _| |
    |  _  |  __/ | |  __/ |  _| (_) |  _| (_| |
    |_| |_|\___|_|_|\___| |_|  \___/|_|  \__| |
    ${AnsiColor.DEFAULT}

    这里 ${AnsiColor.BRIGHT_RED} 表示设置文字颜色为亮红色,${AnsiColor.DEFAULT} 表示恢复默认颜色。

  3. 配置 application.properties 添加以下配置:

    spring.banner.image.location=classpath:logo.png
    spring.banner.image.width=76
    spring.banner.image.height=30
    spring.banner.image.margin=3
    spring.banner.image.invert=false
    • spring.banner.image.location:指定图片的位置,这里是 classpath:logo.png,表示图片位于 src/main/resources 目录下。
    • spring.banner.image.width:指定图片的宽度,单位是字符。
    • spring.banner.image.height:指定图片的高度,单位是字符。
    • spring.banner.image.margin:指定图片周围的空白边距,单位是字符。
    • spring.banner.image.invert:是否反转颜色,true 表示反转,false 表示不反转。
  4. 准备图片:src/main/resources 目录下放入你的图片,命名为 logo.png

    注意: 图片会被转换成 ASCII 字符,所以图片要尽量简单,颜色对比要明显,否则效果可能不太好。

姿势三:使用 Banner 接口

如果你想更灵活地控制 Banner 的内容,可以使用 Spring Boot 提供的 Banner 接口。

  1. 创建 Banner 实现类: 创建一个类,实现 Banner 接口,并重写 printBanner 方法。

    import org.springframework.boot.Banner;
    import org.springframework.core.env.Environment;
    import org.springframework.boot.ansi.AnsiColor;
    import org.springframework.boot.ansi.AnsiOutput;
    import org.springframework.boot.ansi.AnsiStyle;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Profile;
    
    @Configuration
    public class MyBanner implements Banner {
    
        @Override
        public void printBanner(Environment environment, Class<?> sourceClass, Appendable out) {
            String appName = environment.getProperty("spring.application.name", "Default App Name");
            String version = "1.0.0"; // 替换为你的应用版本
            String developer = "Your Name"; // 替换为你的名字
    
            // 使用 AnsiOutput 控制颜色和样式
            String bannerText = AnsiOutput.toString(
                    AnsiColor.BRIGHT_GREEN, "  欢迎使用 ", AnsiStyle.BOLD, appName, AnsiStyle.NORMAL, "n",
                    AnsiColor.DEFAULT, "  版本: ", version, "n",
                    "  开发者: ", developer, "n"
            );
    
            try {
                out.append(bannerText);
            } catch (Exception e) {
                // 处理异常
            }
        }
    }

    在这个例子中,我们使用了 AnsiOutput 类来控制 Banner 的颜色和样式。你可以使用 AnsiColorAnsiStyle 等枚举来设置不同的颜色和样式。

  2. 注册 Banner Bean: 在 Spring Boot 的启动类中,注册你的 Banner Bean。

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    
    @SpringBootApplication
    public class MyApplication {
    
        public static void main(String[] args) {
            SpringApplication app = new SpringApplication(MyApplication.class);
            app.setBanner(new MyBanner()); // 设置自定义 Banner
            app.run(args);
        }
    }

    或者,你也可以使用 @Bean 注解来注册 Banner Bean。

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class BannerConfig {
    
        @Bean
        public MyBanner myBanner() {
            return new MyBanner();
        }
    }

    注意: 如果你同时使用了 banner.txtBanner 接口,Banner 接口的优先级更高,banner.txt 会被忽略。

姿势四:使用 SpringApplicationBuilder

如果你想在程序中动态地设置 Banner,可以使用 SpringApplicationBuilder

import org.springframework.boot.builder.SpringApplicationBuilder;

public class MyApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(MyApplication.class)
                .banner((environment, sourceClass, out) -> {
                    try {
                        out.append("My Custom Bannern");
                    } catch (Exception e) {
                        // 处理异常
                    }
                })
                .run(args);
    }
}

这种方式可以在程序中直接定义 Banner 的内容,更加灵活。

第三幕:Banner 中的变量魔法

Spring Boot Banner 还支持一些内置变量,可以在 banner.txt 中使用。

变量名 描述
${application.version} 应用的版本号,从 MANIFEST.MF 文件中读取。
${application.formatted-version} 格式化后的应用版本号,例如:v1.0.0
${spring-boot.version} Spring Boot 的版本号。
${spring-boot.formatted-version} 格式化后的 Spring Boot 版本号,例如:v2.7.17
${application.name} 应用的名称,从 spring.application.name 配置项中读取。
${os.name} 操作系统名称。
${os.version} 操作系统版本。
${java.version} Java 版本。

例如,你可以在 banner.txt 中这样使用:

Application Name: ${application.name}
Version: ${application.version}
Spring Boot Version: ${spring-boot.version}

第四幕:高级技巧:使用 Groovy 脚本

如果你想让 Banner 更加动态和复杂,可以使用 Groovy 脚本。

  1. 创建 banner.groovysrc/main/resources 目录下创建一个 banner.groovy 文件。

  2. 编写 Groovy 脚本:banner.groovy 文件中,编写你的 Groovy 脚本。

    import org.springframework.boot.ansi.AnsiColor
    
    def appName = spring.application.name ?: "Default App Name"
    def version = "1.0.0" // 替换为你的应用版本
    def developer = "Your Name" // 替换为你的名字
    
    println """
    ${AnsiColor.BRIGHT_YELLOW}
      ***************************************
      *       Welcome to ${appName}       *
      ***************************************
    ${AnsiColor.DEFAULT}
    Version: ${version}
    Developer: ${developer}
    """

    在这个例子中,我们使用了 Groovy 的字符串模板,可以动态地获取应用的名称、版本号和开发者信息。

第五幕:Banner 的禁用与开启

有时候,你可能不想显示 Banner,或者想在不同的环境下显示不同的 Banner。Spring Boot 提供了几种方法来禁用和开启 Banner。

  • 禁用 Banner:
    • application.properties 中添加 spring.main.banner-mode=off
    • 在启动类中,使用 SpringApplication.setBannerMode(Banner.Mode.OFF)
  • 开启 Banner:
    • application.properties 中添加 spring.main.banner-mode=consolespring.main.banner-mode=log
    • 在启动类中,使用 SpringApplication.setBannerMode(Banner.Mode.CONSOLE)SpringApplication.setBannerMode(Banner.Mode.LOG)

总结:让你的 Spring Boot 应用“亮”起来!

好了,今天的“Spring Boot Banner 魔法秀”就到这里了。希望通过今天的讲解,你已经掌握了自定义 Spring Boot Banner 的各种姿势,可以为你的应用打造一个独一无二的启动画面。记住,Banner 不仅仅是一个启动画面,更是你的品牌名片,是你的个性表达,是提升用户体验的重要一步!

最后,送大家一句名言:“代码是冰冷的,但 Banner 可以是温暖的!”

希望大家在编码的道路上越走越远,做出更多优秀的应用!感谢观看,下次再见!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注