【SpringBoot】入门教程:超详细的Banner打印解析!

332 阅读6分钟

Moss前沿AI

【OpenAI】获取OpenAI API KEY的两种方式,开发者必看全方面教程!

【VScode】VSCode中的智能AI-GPT编程利器,全面揭秘ChatMoss & ChatGPT中文版

【GPT-o1系列模型!支持Open API调用、自定义助手、文件上传等强大功能,助您提升工作效率!】>>> - CodeMoss & ChatGPT-AI中文版

在这里插入图片描述

什么是SpringBoot Banner?

Banner,即横幅,是在SpringBoot应用启动时显示的一段文字、图像或其他形式的展示内容。默认情况下,SpringBoot在启动时会显示一个包含Spring标志的ASCII图案,配以版本信息。这不仅为开发者提供了应用启动的视觉反馈,也为项目增添了一份独特的标识。

SpringBoot中Banner的实现原理

SpringBoot的Banner是通过org.springframework.boot.Banner接口来实现的。SpringBoot在启动过程中,会查找可用的Banner资源,并按照一定的优先级进行加载:

  1. 自定义Banner实现:开发者可以通过实现Banner接口,提供自定义的Banner逻辑。
  2. Banner文本文件:SpringBoot会查找项目中的banner.txt文件,作为启动时的Banner展示内容。
  3. 默认Banner:如果以上两种方式均未提供Banner,SpringBoot将使用内置的默认Banner。

在加载Banner的过程中,SpringBoot会优先级排序,确保开发者的自定义Banner能够覆盖默认设置。

在这里插入图片描述

如何自定义SpringBoot的Banner

自定义Banner是一个提升应用专业度和个性化的重要手段。以下是几种常见的自定义方式:

内置Banner类型介绍

SpringBoot提供了几种内置的Banner类型,以满足不同的定制需求:

  1. 文本文件Banner:通过在项目资源目录下添加banner.txt文件,可以定义纯文本或ASCII图案的Banner。
  2. 图片Banner:支持使用图片作为Banner,需要借助第三方库将图片转换为ASCII字符。
  3. 代码实现Banner:通过实现Banner接口,可以完全自定义Banner的生成逻辑,包括动态内容的展示。

使用文本文件自定义Banner

最简单的自定义Banner方式是使用banner.txt文件。以下是具体步骤:

  1. 创建banner.txt文件:在src/main/resources目录下创建一个名为banner.txt的文件。

  2. 编写Banner内容:在banner.txt中添加你想要展示的文本或ASCII图案。例如:

    *************************************
    *          我的SpringBoot应用        *
    *          Version 1.0.0            *
    *************************************
    
  3. 启动应用:运行SpringBoot应用时,新的Banner将取代默认Banner进行显示。

通过代码自定义Banner

若需要更复杂的Banner,如动态内容或图形化展示,可以通过实现Banner接口进行自定义。以下是具体步骤:

  1. 创建自定义Banner类

    package com.example.demo;
    
    import org.springframework.boot.Banner;
    import org.springframework.core.env.Environment;
    
    import java.io.PrintStream;
    
    public class CustomBanner implements Banner {
    
        @Override
        public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
            out.println("*************************************");
            out.println("*      欢迎使用我的SpringBoot应用     *");
            out.println("*           Version " + environment.getProperty("application.version") + "          *");
            out.println("*************************************");
        }
    }
    
  2. 配置应用使用自定义Banner

    application.properties文件中添加以下配置:

    spring.banner.location=classpath:banner.txt
    

    或者在主应用类中设置:

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication app = new SpringApplication(DemoApplication.class);
            app.setBanner(new CustomBanner());
            app.run(args);
        }
    }
    

代码示例与实战演练

通过实战案例,我们将更直观地了解如何在SpringBoot项目中自定义Banner。

示例一:经典ASCII艺术Banner

  1. 创建banner.txt

    src/main/resources目录下创建banner.txt,输入以下内容:

     ____                  _           _     
    |  _ \  ___  __ _ _ __| |__   ___ | |__  
    | | | |/ _ \/ _` | '__| '_ \ / _ \| '_ \ 
    | |_| |  __/ (_| | |  | |_) | (_) | | | |
    |____/ \___|\__,_|_|  |_.__/ \___/|_| |_|
    
  2. 启动应用

    运行SpringBoot应用,你将看到自定义的ASCII艺术Banner取代默认Banner。

示例二:彩色Banner的实现

为了使Banner更加生动,我们可以为其添加颜色。以下是通过代码实现彩色Banner的方法:

  1. 添加依赖

    为了支持ANSI颜色码,我们可以使用jansi库。在pom.xml中添加:

    <dependency>
        <groupId>org.fusesource.jansi</groupId>
        <artifactId>jansi</artifactId>
        <version>1.18</version>
    </dependency>
    
  2. 创建彩色Banner类

    package com.example.demo;
    
    import org.fusesource.jansi.Ansi;
    import org.springframework.boot.Banner;
    import org.springframework.core.env.Environment;
    
    import java.io.PrintStream;
    
    public class ColorfulBanner implements Banner {
    
        @Override
        public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
            String banner = Ansi.ansi()
                    .fg(Ansi.Color.CYAN)
                    .a("*************************************\n")
                    .fg(Ansi.Color.GREEN)
                    .a("*      欢迎使用彩色SpringBoot应用      *\n")
                    .fg(Ansi.Color.YELLOW)
                    .a("*           Version 1.0.0           *\n")
                    .fg(Ansi.Color.CYAN)
                    .a("*************************************")
                    .reset()
                    .toString();
            out.println(banner);
        }
    }
    
  3. 配置应用使用彩色Banner

    在主应用类中设置:

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication app = new SpringApplication(DemoApplication.class);
            app.setBanner(new ColorfulBanner());
            app.run(args);
        }
    }
    
  4. 启动应用

    运行应用后,你将看到彩色的Banner效果,提升应用的视觉体验。

高级用法:动态Banner与环境感知

在某些场景下,Banner内容需要根据不同的环境或配置进行动态调整。以下是实现动态Banner的方法:

  1. 基于环境变量动态展示Banner

    在自定义Banner类中,根据Environment对象获取不同的环境变量,调整Banner内容。

    package com.example.demo;
    
    import org.fusesource.jansi.Ansi;
    import org.springframework.boot.Banner;
    import org.springframework.core.env.Environment;
    
    import java.io.PrintStream;
    
    public class DynamicBanner implements Banner {
    
        @Override
        public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
            String profile = environment.getActiveProfiles().length > 0 ? environment.getActiveProfiles()[0] : "default";
            String version = environment.getProperty("application.version", "1.0.0");
    
            String banner = Ansi.ansi()
                    .fg(Ansi.Color.CYAN)
                    .a("*******************************\n")
                    .fg(Ansi.Color.GREEN)
                    .a("*    SpringBoot " + profile.toUpperCase() + " 环境    *\n")
                    .fg(Ansi.Color.YELLOW)
                    .a("*      Version " + version + "       *\n")
                    .fg(Ansi.Color.CYAN)
                    .a("*******************************")
                    .reset()
                    .toString();
            out.println(banner);
        }
    }
    
  2. 配置不同环境的Banner展示

    根据不同的Spring profile,Banner会自动调整显示内容。例如,在开发环境中显示“DEV”,在生产环境中显示“PROD”。

  3. 启动应用并切换环境

    通过--spring.profiles.active=prod参数启动应用,可以看到不同环境下的Banner内容变化。

常见问题与解决方案

问题一:Banner文件不生效怎么办?

解决方案

  • 确认banner.txt文件位于src/main/resources目录下。
  • 检查文件编码,确保为UTF-8格式。
  • 确认spring.banner.enabled属性未在配置文件中被禁用。

问题二:自定义Banner中的颜色不显示?

解决方案

  • 确保终端支持ANSI颜色码。
  • 引入jansi库并正确配置自定义Banner类。
  • 检查代码逻辑,确保颜色码正确嵌入。

问题三:如何在Banner中显示动态信息,如版本号?

解决方案

  • 在自定义Banner类中,通过Environment对象获取所需的动态信息。
  • 确保相关配置项(如application.version)在application.properties或其他配置文件中正确设置。

Moss前沿AI

【OpenAI】获取OpenAI API KEY的两种方式,开发者必看全方面教程!

【VScode】VSCode中的智能AI-GPT编程利器,全面揭秘ChatMoss & ChatGPT中文版

【GPT-o1系列模型!支持Open API调用、自定义助手、文件上传等强大功能,助您提升工作效率!】>>> - CodeMoss & ChatGPT-AI中文版

总结

通过本文的详细解析,相信你已经掌握了SpringBoot中Banner打印的实现原理及多种自定义方法。从简单的文本Banner到复杂的彩色和动态Banner,SpringBoot提供了灵活的方式让开发者根据需求自由发挥。自定义Banner不仅能提升应用的专业形象,还能增强开发者的使用体验。