Springboot延伸之自定义Banner

news2024/12/29 0:50:49

前言

前几周陆陆续续花了5万多字写了我读到的Springboot启动过程的源码,收获颇多,其中给自己留了扩展的作业。我们每次启动Springboot的时候,都有一个Spring的Banner,读源码的过程中可以得知我们可以自定义属于自己的Banner,所以这就来把扩展的作业交上!

一、自定义Banner

我们先来自定义个一个Banner,再来分析是怎么读到自定义的Banner的。
我们在resources下面增加一个名为banner.txt的文件:
在这里插入图片描述
切记:这里的文件名只能叫这个,否则代码读取不到,待会咱们再回顾源码就知道了。
文件内容为:

       __  _            __
      / / | |          / /
     | |  | |         | |
     | |  | |         | |
  ___| |__| |____  ___| |__
/____   __|  ____\/___  ___|
     | |  | |  | |    | |
     | |  | |  | |    | |
     | |  | |  | |    | |
     | |  | |  | |    | |
     |_|  |_|  |_|    |_|
:: fhf::

我这里就写了我姓名拼音的第一个字母,把这个粘贴到banner.txt文件中,直接启动Springboot就可以看到控制台打印的咱们自定义的Banner了。(PS:这个自己弄的不太好看,凑合看哈~)
控制台打印效果:
在这里插入图片描述
如此以后可以定制自己公司的Banner了,是不是很酷😎~~

二、自定义Banner打印源码分析

在我写的这篇博客的A.8、打印Banner信息中有详细分析了Spring的Banner的打印的过程,感兴趣的童鞋可以再回去看看哈~
我们再来来分析我们自定义的banner的打印过程。
我们从main方法进入来到SpringApplication的Banner printedBanner = printBanner(environment);方法,再进入printBanner方法中:
在这里插入图片描述
我们再进入断点的print方法:
在这里插入图片描述
这里调用了getBanner方法,在第三行banners.addIfNotNull(getImageBanner(environment));addIfNotNull方法的入参有个getTextBanner(environment)方法,进去之后可以看到:
在这里插入图片描述
此方法里面指定要读取name为spring.banner.location的属性中的值为banner.txt的属性,全局搜索一下spring.banner.location,可以看到里面有不同包下的json文件中有这个值,具体读的哪个呢?这个我还没有搞懂,后面有时间再来补补作业。
在这里插入图片描述
很显然在getTextBanner方法中if条件resource.exists()是成立的,所以会执行if块中的内容,最后return new ResourceBanner(resource);
再回到addIfNotNull方法,banner不为空,所以添加到Banner的List集合中了:
在这里插入图片描述
而上图中红框的hasAtLeastOneBanner方法待会要用,我就提前截了个图,这个方法必然也是返回true,咱们接着回到getBanner方法:
在这里插入图片描述
上图中的hasAtLeastOneBanner就是咱们在上个图上中画红框的,结果是true,所以直接return banners
然后就是回到了print方法,调用printBanner对banner信息进行打印:
在这里插入图片描述
上图中的代码执行到了out.println(banner)方法之后,自定义的banner就打印到了控制台了。
完活~是不是还挺简单的

-----------------你知道的越多,不知道的越多-----------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

领域驱动设计

DDD的代码结构_ronshi的博客-CSDN博客_ddd代码结构 DDD( 领域驱动设计)概念来源于2004年著名建模专家eric evans的书籍:《domain-driven design –tackling complexity in the heart of software》(中文译名:领域驱动设计—软件核心复杂性应对之道)。 DDD领域驱动设…

全流量安全分析为IT运维提供高效保障(二)

前言 某高校信息中心老师反应,用户反馈教务系统有访问慢的情况,需要通过流量分析系统来了解系统的运行情况,此报告专门针对系统的性能数据做了分析。 前一章做了系统功能模块分析和整体流量分析,本章将进行异常分析、其他信息发…

【Linux】C语言缓冲区、缓冲区的实现

目录 一、C语言缓冲区 1.1 什么是缓冲区 1.2 缓冲区刷新 1.3 问题解释 1.4 stdout与stderr 1.5 perror的实现 二、模拟实现缓冲区 2.1 接口展示 2.2 函数实现 2.3 测试与源代码 一、C语言缓冲区 1.1 什么是缓冲区 缓冲区本质是一块C语言提供的内存空间&#xff0c…

边缘计算网关的应用有哪些

边缘计算网关(又叫物联网边缘计算网关),简称 Edge-Gateway,是一种可以在设备上运行本地计算、消息通信、数据缓存等功能的工业智能网关,可以在无需联网的情况实现设备的本地联动以及数据处理分析。 其具备接口丰富&…

无线蓝牙耳机什么牌子的好?好的无线蓝牙耳机推荐

无线蓝牙耳机因为携带更便捷,连接也越来越迅速而受到了不少用户的喜爱。在目前的耳机市场中,蓝牙耳机所占的比例越来越高,无线蓝牙耳机牌子也逐渐增多。那么,什么牌子的无线蓝牙耳机好?下面,我给大家盘点了…

迁移学习的 PyTorch 实现

什么是迁移学习?迁移学习是一种用于机器学习的技术,它使用预先训练好的模型来创建新的模型。这可以减少新创建模型所需的训练时间,因为它将继承以前学习的特性,这也将提高其准确性。但是迁移学习能带来多大的不同呢?为…

销售促单话术

销售过程中,销售不仅可以运用一些销售技巧来吸引客户的兴趣,也可以通过一些话术来获得客户的认同。 ​ 前言 销售过程中,销售不仅可以运用一些销售技巧来吸引客户的兴趣,也可以通过一些话术来获得客户的认同。很多销售一定遇到过…

【观察】全面赋能汽车行业数字化转型,亚马逊云科技的决心与诚意

毫无疑问,新一轮科技革命正在驱动整个汽车产业发生颠覆性的重大变革,传统的行业游戏规则也将在数字化时代被改写,而未来以电动化、智能化、互联化、共享化为特征的“新四化”,也正在成为整个汽车产业技术创新和商业模式进化的新方…

一文带你走进Python文件操作

Py文件操作 一: """ 1.找到这个文件,双击打开 ​ open(文件路径,mode"",encoding"") mode>读/写 encoding>文件的编码集是什么 ​文件路径:1.绝对路径d:Tools/Tool/python/a.txt 不安全2.相对路径相对于当前你的程序所在的文件夹…

回首来时路,未来皆坦途.......

不觉间,又到了年末,这一年似乎并没有什么特别的经历和值得一提的业绩,就是这样平淡的过着每一天,这大概就是普通人的人生吧..... 今年最大的改变就是跨行业成长,从事了售前工程师的工作,由于之前并没有相关…

20221230英语学习

今日单词 agreeable adj.惬意的,宜人的;可接受的,适合的;欣然同意的 gleam v.发微光;闪烁;隐约闪光;(在眼中)闪现;表露 hypothesis n.[复数hypotheses] 假…

CSS3 filter滤镜

filter 顾名思义就是过滤的意思 使用 filter属性为元素(常用于<img>)带来视觉的效果 filter描述none默认值&#xff0c;没有效果。blur(px)给图像设置模糊效果。默认是0&#xff1b;这个参数可设置css长度值&#xff0c;但不接受百分比值。brightness(%)调整图像的对比…

main 方法演示 spring 注解方式获取 bean

文章目录一、环境准备1、创建 Java 工程&#xff0c;引入 spring 相关 jar 包2、构建 path二、开发1、准备一个 User 类2、编写配置类 BeanConfig3、编写测试类 SpringTest4、验证结果本文章使用 JavaSE 方式&#xff0c;创建含有 main 方法的类&#xff0c;演示如何用简单的方…

用天翎低代码做办公协同软件,简单高效

编者按&#xff1a;在数字办公流行的现在&#xff0c;办公协同软件是企业必备。本文分析了办公协同软件的作用&#xff0c;并指出了基于低代码平台实现的办公协同软件可以很好地满足企业需求&#xff0c;最后进行了相关案例展示。 关键词&#xff1a;私有化部署&#xff0c;数…

从云原生实战峰会,透视2023年云原生发展趋势

CSDN&#xff1a;如果用两个关键词来总结 2022 年云原生的发展态势&#xff0c;您会有哪些评价&#xff1f;——繁荣和普惠。“繁荣”代表当前云原生的技术和产品蓬勃发展&#xff1b;“普惠”代表云原生技术从互联网走向金融、零售、政企等行业&#xff0c;普惠千行百业构建丰…

MySQL学习笔记(十五)行锁表锁间隙锁临键锁共享锁排他锁死锁

行锁表锁间隙锁临键锁共享锁排他锁死锁手动提交行锁&#xff08;记录锁Record Locks&#xff09;表锁间隙锁&#xff08;Gap Locks&#xff09;临键锁&#xff08;Next-Key Locks&#xff09;共享锁&#xff0c;排他锁死锁查看事物&#xff0c;锁的命令死锁的4个必要条件模拟死…

odoo学习之security, menu, tree, form

security 在ir.model.access.csv中 id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink可以设置成 access_org_info,org.info,model_org_info,,1,1,1,1其中&#xff1a;access_org_info&#xff1a;access_为固定开头&#xff0c;org_info为模块…

Mol2Image: Improved Conditional Flow Models for Molecule to Image Synthesis

Mol2Image: 连接药物分子与细胞显微图像的条件流模型【2021CVPR】 Mol2Image: Improved Conditional Flow Models for Molecule to Image Synthesis paper&#xff1a;Improved Conditional Flow Models for Molecule to Image Synthesis | Papers With Code code&#xff1…

谷粒商城之高级篇(3)

2 商城业务 2.7 订单服务 2.7.22 创建业务交换机&队列 这里承接 知识补充篇 6 RabbitMQ 订单分布式主体逻辑 订单超时未支付触发订单过期状态修改与库存解锁 创建订单时消息会被发送至队列order.delay.queue&#xff0c;经过TTL的时间后消息会变成死信以order.release…

如何配置 SLO

前言 无论是对外提供 IaaS PaaS SaaS 的云公司&#xff0c;还是提供信息技术服务的乙方公司&#xff0c;亦或是金融 制造等各行各业的数据中心、运维部门&#xff0c;我们的一个非常重要的合同承诺或考核评估指标就是&#xff1a;SLA&#xff08;即&#xff1a;Service-Level …