SpringBoot启动流程分析之设置系统属性spring.beaninfo.ignore、自定义banner图(五)

SpringBoot启动流程分析之设置系统属性spring.beaninfo.ignore、自定义banner图(五)

参考
目录

文章目录

      • SpringBoot启动流程分析之设置系统属性spring.beaninfo.ignore、自定义banner图(五)
          • 1、设置sping.beaninfo.ignore属性
          • 2、Banner图
            • 2.1、输出banner图
          • 3、自定义banner图

org.springframework.boot.SpringApplication#run(java.lang.String…)

public ConfigurableApplicationContext run(String... args) {StopWatch stopWatch = new StopWatch();stopWatch.start();ConfigurableApplicationContext context = null;Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList<>();configureHeadlessProperty();SpringApplicationRunListeners listeners = getRunListeners(args);listeners.starting();try {// 开始分析 //得到系统属性spring.beaninfo.ignore,如果为空设置为trueconfigureIgnoreBeanInfo(environment);Banner printedBanner = printBanner(environment);//其余部分忽略...}catch (Throwable ex) {handleRunFailure(context, ex, exceptionReporters, listeners);throw new IllegalStateException(ex);}return context;}

流程分析

1、设置sping.beaninfo.ignore属性
private void configureIgnoreBeanInfo(ConfigurableEnvironment environment) {            //得到系统属性spring.beaninfo.ignore,如果为空设置为trueif (System.getProperty(CachedIntrospectionResults.IGNORE_BEANINFO_PROPERTY_NAME) == null) {Boolean ignore = environment.getProperty("spring.beaninfo.ignore",Boolean.class, Boolean.TRUE);System.setProperty(CachedIntrospectionResults.IGNORE_BEANINFO_PROPERTY_NAME,ignore.toString());}
}
2、Banner图
private Banner printBanner(ConfigurableEnvironment environment) {//判断banner图输出模式,off为不输出,直接返回空if (this.bannerMode == Banner.Mode.OFF) {return null;}//得到resourceLoaderResourceLoader resourceLoader = (this.resourceLoader != null)? this.resourceLoader : new DefaultResourceLoader(getClassLoader());//实例化一个SpringApplicationBannerPrinterSpringApplicationBannerPrinter bannerPrinter = new SpringApplicationBannerPrinter(resourceLoader, this.banner);//判断banner是否输出到日志文件if (this.bannerMode == Mode.LOG) {return bannerPrinter.print(environment, this.mainApplicationClass, logger);}//最后就是输出到控制台了,参数包括environment,主类,一个打印流System.outreturn bannerPrinter.print(environment, this.mainApplicationClass, System.out);
}

Banner图的打印模式枚举值:

Mode.OFF :不输出
Mode.CONSOLE:将输出到System.out,即控制台
Mode.log:输出到日志文件
可以通过SpringApplication对象设置打印模式。设置为OFF,即不输出Banner,启动后效果如下。

@SpringBootApplication
public class Application {public static void main(String[] args) {
//		SpringApplication.run(Application.class, args);SpringApplication application = new SpringApplication(Application.class);application.setBannerMode(Mode.OFF);ConfigurableApplicationContext context = application.run(args);context.close();}
}

在这里插入图片描述

2.1、输出banner图

new一个Banners对象,该对象内部有一个Banner对象的集合,下一步就是得到文本或者图片banner,然后添加到list中,不为空则返回该对象。在Banners的printBanner方法中循环调用对应ResourceBanner和ImageBanner的printBanner方法。

public Banner print(Environment environment, Class<?> sourceClass, PrintStream out) {Banner banner = getBanner(environment);//输出banner图banner.printBanner(environment, sourceClass, out);return new PrintedBanner(banner, sourceClass);
}private Banner getBanner(Environment environment) {Banners banners = new Banners();//得到图片banner,如果不为空就添加到List集合中banners.addIfNotNull(getImageBanner(environment));//得到txt文本banner,同样不为空就添加到List集合中banners.addIfNotNull(getTextBanner(environment));//r如果List不为空,直接返回if (banners.hasAtLeastOneBanner()) {return banners;}//如果该banner对象不为空,返回该banner对象if (this.fallbackBanner != null) {return this.fallbackBanner;}//最后就是返回默认banner图,也就是我们看到的springreturn DEFAULT_BANNER;
}

可以看到banner的配置项,默认位置,默认的txt文件名和支持的banner图片类型,图片名字也是banner加上后缀。如果存在txt文档,返回的就是ResourceBanner,存在图片banner返回的就是ImageBanner,如果不存在都是返回空,则使用默认的SpringBootBanner。也就是启动后看见的那个大大的Spring。
在这里插入图片描述

private Banner getBanner(Environment environment) {Banners banners = new Banners();banners.addIfNotNull(getImageBanner(environment));banners.addIfNotNull(getTextBanner(environment));if (banners.hasAtLeastOneBanner()) {return banners;}if (this.fallbackBanner != null) {return this.fallbackBanner;}return DEFAULT_BANNER;}private Banner getTextBanner(Environment environment) {String location = environment.getProperty(BANNER_LOCATION_PROPERTY, DEFAULT_BANNER_LOCATION);Resource resource = this.resourceLoader.getResource(location);if (resource.exists()) {return new ResourceBanner(resource);}return null;}private Banner getImageBanner(Environment environment) {String location = environment.getProperty(BANNER_IMAGE_LOCATION_PROPERTY);if (StringUtils.hasLength(location)) {Resource resource = this.resourceLoader.getResource(location);return resource.exists() ? new ImageBanner(resource) : null;}for (String ext : IMAGE_EXTENSION) {Resource resource = this.resourceLoader.getResource("banner." + ext);if (resource.exists()) {return new ImageBanner(resource);}}return null;}

最后就是输出banner图了,System.out.println();
在这里插入图片描述

3、自定义banner图

在resources目录下新建一个banner.txt文件或者你也可以直接放一张图片到resources目录下,名字是banner.jpg(gif|png)。我的banner.txt内容如下。

可以到这个网站去生成banner图:生成banner图

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

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

相关文章

限流算法整理——滑动窗口限流算法

限流算法描述 滑动窗口限流需要将每个窗口空间划分为无限小的窗口区间&#xff0c;并且动态调整区间的起始点&#xff0c;并且在调整完毕之后需要判断各个区间&#xff0c;累加各个区间的请求&#xff0c;查看是否到达最大的阈值&#xff0c;以此返回允许请求还是拒绝请求 算…

数据库与数据库管理系统 MySQL的安装 SQL语言学习:DDL、DML

day51 数据库 数据库&#xff08;database&#xff09;就是一个存储数据的仓库。为了方便数据的存储和管理&#xff0c;它将数据按照特定的规律存储在磁盘上。 通过数据库管理系统&#xff0c;可以有效地组织和管理存储在数据库中的数据&#xff0c;如数据库管理系统MySQL 数据…

Java学习Lambda表达式

Lambda表达式 有且只有一个未实现的方法叫做Lambda表达式&#xff0c;可以实现函数式编程 // 这个注解是用来检查你写的函数是否是函数式接口 FunctionalInterfaceinterface Myinterface {int sum(int a, int b);default String priteTitle(String name, int age, String sex)…

时间序列差分顺序的讨论

生成出一组时间序列数据 服从标准正态分布的50个 随机数据 分别给出4步季节差分&#xff0c;再进行1步1阶差分的结果 和 1步1阶差分再进行 4步季节差分 的结果 讨论&#xff1a; 先进行4步季节差分再进行1步1阶差分与先进行1步1阶差分再进行4步季节差分的结果看起来是相同的

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:潍柴雷沃智慧农业无人驾驶

潍柴雷沃智慧农业科技股份有限公司&#xff0c;是潍柴集团重要的战略业务单元&#xff0c;旗下收获机械、拖拉机等业务连续多年保持行业领先&#xff0c;是国内少数可以为现代农业提供全程机械化整体解决方案的品牌之一。潍柴集团完成对潍柴雷沃智慧农业战略重组后&#xff0c;…

kaggle:房价预测

比赛链接 结果展示 结果链接 8848是密码 文章目录 数据处理调包部分拒绝掉包岭回归理论代码实践结果 自助采样理论代码 集成学习前言Bagging理论Bagging-Ridge代码Bagging-Ridge实践Bagging-Ridge结果 Tricks 数据处理 #打开文件 import pandas as pd dataset1pd.read_csv(&q…

How to install a dataset from huggingface?

当我从抱抱脸上git clone imdb数据集时&#xff0c;plain_text里的文件是这样的&#xff1a;

梦想的味道,特别的邀约 —— 蒙自源六一儿童节特别活动

每个孩子心中都有一颗梦想的种子&#xff0c;只需一点阳光和雨露&#xff0c;便能生根发芽&#xff0c;开出绚烂的花朵。六一儿童节&#xff0c;是孩子们的节日&#xff0c;也是他们梦想起航的日子。蒙自源希望成为孩子们梦想的沃土&#xff0c;用美食和爱滋养他们的成长。在这…

【Qt知识】Qt框架中的信号(Signals)与槽(Slots)机制

Qt框架中的信号&#xff08;Signals&#xff09;与槽&#xff08;Slots&#xff09;机制是一种强大的通信方式&#xff0c;允许对象之间相互通信而无需对象之间直接引用或了解对方。这一机制简化了应用程序的事件处理和组件之间的交互&#xff0c;是Qt的一大特色和核心概念。 …

Qt6.4.2基于CMake添加Qt3DCore模块报错

在文档中说明是添加 find_package(Qt6 REQUIRED COMPONENTS 3dcore) target_link_libraries(mytarget PRIVATE Qt6::3dcore)find_package是没有问题&#xff0c;但是target_link_libraries会报错&#xff0c;报拼写错误&#xff0c;无法链接上Qt6::3dcore 需要使用“3DCore”…

windows系统搭建go开发编译环境

1、前言 windows系统&#xff0c;从零开始搭建go开发编译环境详细步骤。 2、go下载和安装 2.1 下载 下载地址如下&#xff1a; All releases - The Go Programming Language 可以根据自己的需要选择下载对应的版本下载即可。 对于windows系统&#xff0c;如果是6…

有开源软件,也有开源硬件?

开源软件或库有很多&#xff0c;例如 Linux 操作系统的内核 The Linux Kernel Archiveshttps://www.kernel.org/ 开源的各种Linux发行版本&#xff0c;Ubuntu 、CentOS等 Enterprise Open Source and Linux | Ubuntuhttps://ubuntu.com/ 开源的视觉函数库&#xff0c;OpenC…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:美团小袋自动配送车

大型电商公司美团已选用NVIDIA Jetson AGX Xavier 平台&#xff0c;作为无人配送机器人核心AI算力。 美团点评是全球大型的按需食品配送公司&#xff0c;结合了Uber Eats、Yelp和Groupon的商业模式&#xff0c;与超过40万家本地企业开展合作。他们推出了小袋自动配送车&#…

基于深度学习YOLOv8\YOLOv5的花卉识别鲜花识别检测分类系统设计

本文将介绍基于深度学习YOLOv8\YOLOv5PySide6SQLite的花卉检测与识别系统&#xff0c;该系统基于YOLOv8算法&#xff0c;并与YOLOv5版本进行比较&#xff0c;该系统不仅实现了对花卉的精准识别和分类&#xff0c;还提供了包括用户认证管理、模型快速切换及界面个性化定制在内的…

PCL点云格式转换成tiff格式

需要把PCL的点云格式转换成tiff格式的图片。 一、第一种转换函数 主要思路: 使用了libtiff库,来写tiff格式把点云的x,y,z通道转换成tiff格式图片的三通道。所以后续读取tiff格式图片转换成点云时,注意三通道代表x,y,z的顺序写tiff格式的时候就是设置文件头,然后把数据一个…

【如何在日志中输出精确到毫秒的时间戳】

1. 需求 在日志中输出精确到毫秒级的时间戳&#xff0c; 格式为&#xff1a;%Y-%m-%d %H:%M:%S.%MS 如&#xff1a;2024-05-30 22:33:25.821 2. 代码实现 #include <iostream> #include <chrono> #include <iomanip> #include <sstream> #include &…

手把手教你如何通过配置hosts文件实现屏蔽广告(去广告hosts文件)

📖 介绍 📖 如果你对广告烦不胜烦,并希望通过一种简单有效的方式去除广告,那么使用 hosts 文件来屏蔽广告是一个不错的选择。本文将详细介绍如何配置和使用 hosts 文件来屏蔽广告,从而提升你的浏览体验。 🏡 演示环境 🏡 本文演示环境如下 操作系统:Windows 11编辑…

HCIA-传输层协议

传输层的俩大协议TCP和UDP 对初学者的要求是对协议有所了解即可&#xff0c;它实现了哪些功能 未来的我这个网普通PC要去访问服务器并与之的数据进行交互 192.168.1.1 -访问-> 192.168.1.2(VX) 192.168.1.1 -访问-> 192.168.1.3(ZFB) 192.168.1.1 -访问-> 192.168.1.…

css特殊效果和页面布局

特殊效果 圆角边框&#xff1a;div{border-radius: 20px 10px 50px 30px;} 四个属性值按顺时针排列&#xff0c;左上的1/4圆半径为20px&#xff0c;右上10&#xff0c;右下50&#xff0c;左下30。 div{border-radius: 20px;} 四角都为20px。 div{border-radius: 20px 10…

Tomcat安装和配置(图文详解)_tomcat安装及配置教程

Tomcat是一个开源的Web应用服务器&#xff0c;它是Apache软件基金会的一个项目。Tomcat被广泛用作Java Servlet和JavaServer Pages&#xff08;JSP&#xff09;技术构建的Web应用程序的运行环境。 它是轻量级的&#xff0c;适合中小型系统和并发访问用户不是很多的场合&#x…