spring-boot启动时酷炫效果banner.txt

前言

  相信很多人看到过这种springboot的启动画面,当然如果你看到过别的更加酷炫和迷信的欢迎私信发我哈。第一次见到的时候我还觉得很炫酷和牛牛,也觉得很可爱,哈哈哈。今天又看到了所以专门写一个博客,分享一下吧。

在这里插入图片描述

实现方式:

先说下怎么用吧
这个东西用起来还是很简单的,只需要在resources中添加一个banner.txt文件。文件中敲上你想要的效果,启动的时候就可以看到。
我的这个代码是(也是copy下来的,如果侵权不让我分享,告知我删除)
代码:

Application Version: ${ruoyi.version}
Spring Boot Version: ${spring-boot.version}

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

然后启动的时候你就可以获得佛祖的保佑,哈哈哈哈哈哈。

原理

  用这个肯定很多人会,今天写这个如果只是介绍下怎么用的话,那不显的我太low了。上源码:
  (源码中进行了注释,可以看看)

public ConfigurableApplicationContext run(String... args) {
//1.创建并启动计时监控类
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();
//2.声明应用上下文对象和异常报告集合
        ConfigurableApplicationContext context = null;
        Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList();
//3.设置系统属性headless的值
        this.configureHeadlessProperty();
//4.创建所有spring运行监听器并发布应用启动事件。
        SpringApplicationRunListeners listeners = this.getRunListeners(args);
        listeners.starting();

        Collection exceptionReporters;
        try {
//5.处理args参数
            ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);
            //6.准备环境
            ConfigurableEnvironment environment = this.prepareEnvironment(listeners, applicationArguments);       this.configureIgnoreBeanInfo(environment);
//7.创建Banner的打印类  
            Banner printedBanner = this.printBanner(environment);
//8.创建应用上下文   
            context = this.createApplicationContext();
//9.实例化异常报告器  
            exceptionReporters = this.getSpringFactoriesInstances(SpringBootExceptionReporter.class, new Class[]{ConfigurableApplicationContext.class}, context);
//10.准备应用上下文
            this.prepareContext(context, environment, listeners, applicationArguments, printedBanner);
//11.刷新
            this.refreshContext(context);
//12.应用上下文刷新之后事件处理
            this.afterRefresh(context, applicationArguments);
            //13.停止计时监控类
            stopWatch.stop();
            //14.输出日志
            if (this.logStartupInfo) {
                (new StartupInfoLogger(this.mainApplicationClass)).logStarted(this.getApplicationLog(), stopWatch);
            }
//15.发布应用上下文启动完成事件
            listeners.started(context);
            //16.执行Runner
            this.callRunners(context, applicationArguments);
        } catch (Throwable var10) {
            this.handleRunFailure(context, var10, exceptionReporters, listeners);
            throw new IllegalStateException(var10);
        }

        try {
        //17.就绪
            listeners.running(context);
            //18.返回对象
            return context;
        } catch (Throwable var9) {
            this.handleRunFailure(context, var9, exceptionReporters, (SpringApplicationRunListeners)null);
            throw new IllegalStateException(var9);
        }
    }

仔细研究源码之后,可以发现Spring boot启动流程
1.创建并启动计时监控类

此计时器是为了监控并记录 Spring Boot 应用启动的时间的,它会记录当前任务的名称,然后开启计时器,最后输出时间。

2.声明应用上下文对象和异常报告集合

此过程声明了应用上下文对象和一个异常报告的 ArrayList 集合。

3.设置系统属性 headless 的值

设置 Java.awt.headless = true,其中 awt(Abstract Window Toolkit)的含义是抽象窗口工具集。设置为 true 表示运行一个 headless 服务器,可以用它来作一些简单的图像处理。

4.创建所有 Spring 运行监听器并发布应用启动事件

此过程用于获取配置的监听器名称并实例化所有的类。

5.初始化默认应用的参数类

也就是说声明并创建一个应用参数对象。

6.准备环境

创建配置并且绑定环境(通过 property sources 和 profiles 等配置文件)。

7.创建 Banner 的打印类

Spring Boot 启动时会打印 Banner 图片,如下图所示:
在这里插入图片描述
如果没有设置banner.txt也会显示一个,类似这样
在这里插入图片描述

9.实例化异常报告器

它调用的是 getSpringFactoriesInstances() 方法来获取配置异常类的名称,并实例化所有的异常处理类。

10.准备应用上下文

此方法的主要作用是把上面已经创建好的对象,传递给 prepareContext 来准备上下文,例如将环境变量 environment 对象绑定到上下文中、配置 bean 生成器以及资源加载器、记录启动日志等操作。

11.刷新应用上下文

此方法用于解析配置文件,加载 bean 对象,并且启动内置的 web 容器等操作。

12.应用上下文刷新之后的事件处理

这个方法的源码是空的,可以做一些自定义的后置处理操作。

13.停止计时监控类

停止此过程第一步中的程序计时器,并统计任务的执行信息。

14.输出日志信息

把相关的记录信息,如类名、时间等信息进行控制台输出。

15.发布应用上下文启动完成事件

触发所有 SpringApplicationRunListener 监听器的 started 事件方法。

16.执行所有 Runner 运行器

执行所有的 ApplicationRunner 和 CommandLineRunner 运行器。

17.发布应用上下文就绪事件

触发所有的 SpringApplicationRunListener 监听器的 running 事件。

18.返回应用上下文对象

可以知道启动显示效果是在第7步,看下逻辑吧
按照图中位置按住ctrl点击鼠标左键
在这里插入图片描述
大概138行,找到run函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到读取需要读取banner.txt,如果没有txt,就读取默认的DEFAULT_BANNER
在这里插入图片描述
大概就是这么个意思嘛。

所以以后可以大胆的改banner.txt了,毕竟这是官方需要的嘛~ [/狗头]

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Biver__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值