• Spring Boot 2.x系列【8】功能篇之自定义启动Banner


    有道无术,术尚可求,有术无道,止于术。

    本系列Spring Boot版本2.7.0

    默认Banner

    Spring Boot 程序在启动时,默认在控制台会打印一个Banner 图,内容为一个Spring LOGO和Spring Boot 版本号。
    在这里插入图片描述

    关闭Banner

    可以在启动类中设置Banner 模式为关闭状态,这样就不会打印了。

    @SpringBootApplication
    public class App1 {
        public static void main(String[] args) {
            SpringApplication springApplication = new SpringApplication(App1.class);
            springApplication.setBannerMode(Banner.Mode.OFF); // 关闭Banner
            springApplication.run(args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    图片 Banner

    先在resources目录下加入一张图片:
    在这里插入图片描述

    然后在application.yml中配置Banner 图片的位置:

    spring:
      banner:
        image:
          location: classpath:banner.jpg
    
    • 1
    • 2
    • 3
    • 4

    点击启动,可以看到将图片转为了ASCII 码进行了打印输出,可爱的哆啦A梦,变成了一个丑八怪,所以一般也不会采用这种方式。。。
    在这里插入图片描述

    文字Banner

    可以像Spring Boot 默认打印的Banner 一样,可以使用文字制作Banner , 并打印相关属性。

    比如:我们公司的英文名称为PEARL,首先我们可以在一些设计网站中设计:

    • https://www.degraeve.com/img2txt.php
    • http://www.network-science.de/ascii/
    • http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20

    输入PEARL,可以看到生成了对应的 ASCII 码Banner 图。
    在这里插入图片描述
    将其复制到resources/banner.txt文件中,就可以了:
    在这里插入图片描述
    可以通过以下配置路径和字符集:

    spring:
      banner:
        location: banner.txt
        charset: UTF-8
    
    • 1
    • 2
    • 3
    • 4

    banner.txt文件中,还可以通过占位符获取环境属性:

    占位符描述
    ${application.version}应用程序的版本号,如MANIFEST.MF文件中Implementation-Version: 1.0,打印为1.0.
    ${application.formatted-version}应用程序MANIFEST文件的版本号,用括号括起来并以v为前缀),例如(v1.0)
    ${spring-boot.version}Spring Boot 版本。例如2.7.1.
    ${spring-boot.formatted-version}Spring Boot 版本。例如V2.7.1
    ${application.title}应用程序的标题,如MANIFEST.MF文件中 Implementation-Title: MyApp,打印为MyApp.
    ANSI样色/样式等${Ansi.NAME} (or ${AnsiColor.NAME}, ${AnsiBackground.NAME}, ${AnsiStyle.NAME})

    MANIFEST.MF文件相关的属性需要打包成jar 运行才会有,所以这里没有显示出来,如下所示:
    在这里插入图片描述

    编程生成

    还支持通过代码的方式生成BannerSpring Boot 提供了 一个功能接口:

    @FunctionalInterface
    public interface Banner {
        void printBanner(Environment environment, Class<?> sourceClass, PrintStream out);
    
        static enum Mode {
            OFF, CONSOLE, LOG;
    
            private Mode() { /* compiled code */ }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    默认打印的Banner就是通过这个接口来打印的,我们也可以自定自己的实现类。

    public class MyBanner implements Banner {
    
        private static final String BANNER = "MyBanner";
    
        @Override
        public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
            out.println(BANNER);
            out.println();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在启动的时候设置 Banner为自定义实现类。

    @SpringBootApplication
    public class App1 {
        public static void main(String[] args) {
            SpringApplication springApplication =new SpringApplication(App1.class);
            springApplication.setBanner(new MyBanner());
            springApplication.run(args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    总结

    一般还是需要将默认的 Banner图改成自己公司,不改也没啥影响。

    方式的话,建议直接生成一个banner.txt放在资源目录下即可。

  • 相关阅读:
    PostgreSQL创建一个数据库和常用的命令
    java网络通信
    java中求平方函数和开方函数
    Mybatis学习笔记——mybatis的整体架构
    315.计算右侧小于当前元素的个数
    PTA甲级之 字符串处理
    信德新材深交所上市:市值109亿 尹洪涛父子为实控人
    Stack Overflow 临时禁用 ChatGPT 生成内容,网友:人类和AI快打起来!
    ABP: 关于IRepository不继承IQueryable<TEntity>的问题 / lQueryable和IEnumerable的区别
    电脑上的小白系统没内存怎么办?
  • 原文地址:https://blog.csdn.net/qq_43437874/article/details/125436096