你的bootstrap.yml文件为什么没起作用?波哥告诉你

你的bootstrap.yml文件为什么没起作用?波哥告诉你
请添加图片描述

SpringBoot源码分析之bootstrap.properties文件加载的原理

  对于SpringBoot中的属性文件相信大家在工作中用的是比较多的,对于application.properties和application.yml文件应该非常熟悉,但是对于bootstrap.properties文件和bootstrap.yml这个两个文件用的估计就比较少了,用过的应该清楚bootstrap.properties中定义的文件信息会先与application.properties中的信息加载。而且大家在使用的时候还经常碰到获取不到bootstrap.properties中定义的信息的困扰,本文就来给大家揭开这些谜团。

1.bootstrap的使用

  首先在SpringBoot中默认是不支持bootstrap.properties属性文件的。我们需要映入SpringCloud的依赖才可以。

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

相关的版本环境

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png
你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

然后创建对应的bootstrap.properties文件,当然你也可以创建bootstrap.yml文件

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

同步的我们也会创建application.properties文件,其中会覆盖一个属性

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

然后我们在controller中获取测试

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

访问测试:http://localhost:8080/query

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

通过访问看到bootstrap.properties中的信息获取到了,同时age也被application.properties中的属性覆盖掉了。加载顺序到底是什么?为什么会覆盖呢?我们接下来分析。

2.bootstrap加载原理分析

  看本文之前最好看下我前面讲解的SpringBoot中的监听机制。

2.1 BootstrapApplicationListener

  在使用bootstrap.properties文件时我们需要映入相关的依赖

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

  其实在这个依赖中会在对应的spring.factories文件中给我们提供新的监听器,也就是BootstrapApplicationListener监听器。

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

  而BootstrapApplicationListener监听触发的事件是ApplicationEnvironmentPreparedEvent事件,这个事件其实和我们前面介绍监听application.properties的时候的监听器ConfigFileApplicationListener监听的是同一个事件。

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png
你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

  如果你看了前面的文章,那么此处你会觉得有点眉目了。也就是当启动的时候发布对应的事件,该监听器会触发相关的解析行为。

2.2 启动流程梳理

  搞清楚了监听器的关系后,我们来看下启动的流程代码具体是怎么执行的。

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png
你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

直接进入

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

在SpringApplication的构造方法中我们要注意两点,1.监听器的加载 2.main方法的主类记录

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

然后回来进入run方法

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png
你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

Debug到第一个端点。

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

然后我们放过。

你的bootstrap.yml文件为什么没起作用?波哥告诉你
GIF.gif

通过上面的动图可以看到又进入了一次这个run方法。先看处理的结果。

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

然后我们再放过,继续

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

分两次加载,有先右后哦。那么这里面的第一个加载的原理到底是什么呢?继续来分析。

2.3 bootstrap.properties的加载原理

  接下来看看是如果出现的一个父context来优先加载我们的bootstrap.properteis文件的,还是从这个图开始

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png
你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

链路如上面一步步跟踪即可。

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

跳过非关键的,直接进入到BootstrapApplicationListener中来看。

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

然后进入到 bootstrapServiceContext方法中。

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

这儿我们看到有创建了一个SpringApplication对象。这个其实就是父Context对象了。

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

进入run方法你会发现,回到了前面

你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png
你的bootstrap.yml文件为什么没起作用?波哥告诉你
image.png

到这应该就清楚了执行的核心流程了,至于是如何加载的属性文件的内容,参考我的上篇文章哦。


原文始发于微信公众号(波哥带你学编程):你的bootstrap.yml文件为什么没起作用?波哥告诉你

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/59255.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!