![f09457e3d31c3f532251f5746666e5dd.png](https://i-blog.csdnimg.cn/blog_migrate/68f8ec937c6b110490e47866a3ee02d6.jpeg)
1. 前言
SpringBoot最核心的就是自动配置类,而自动配置类需要读取配置文件的信息,来自动创建实例,因此配置文件就显得非常重要了。因此本文主要介绍SpringBoot的配置文件、以及自动配置类和配置文件之间的关系,即SpringBoot的运行原理。
2. SpringBoot 配置文件
SpringBoot默认加载的配置文件是在classpath根目录的application.properties或者
application.yml配置文件。
--注意:
[1] 文件名不能写错,因为默认的文件名写死在SpringBoot配置代码中。
[2] SpringBoot支持properties和yml两个格式的配置文件。
2.1. 配置 Web 服务器
--问题1:为什么SpringBoot明明是一个jar项目而且没有选择服务器组件,但是仍然可以启动项目?
因为SpringBoot默认内嵌了一个Web服务器(Tomcat)
--问题2:那么我们如何修改内嵌的Web服务器的参数呢?
既然已经内嵌在程序里面了,我们也知道SpringBoot的参数就是配置在SpringBoot配置文件里面的。那么当然就是在 SpringBoot配置文件里面配置。
2.1.1. properties 格式配置
--Properties 文件的属性,使用的平铺方式书写
## 设置server参数
## 端口
server.port=8081
## 设置下上文路径
server.servlet.context-path=/springboot-quickStart-properties
2.1.2. yml 格式配置
--Yml 文件的属性使用折叠的方式书写
## 设置server参数
## 注意事项:
## [1] 冒号和参数值之间必须要隔一个空格,否则报错
## [2] 属性设置是有层级之分的
server:
port: 8082
servlet:
context-path: /springboot-quickStart-yml
2.2. 多配置文件
需求:希望可以配置多个配置文件,分类存放配置信息。
2.2.1. Properties 配置步骤
第一步:编写三个配置文件
![447c7843686f5627f18fedd62da71e1d.png](https://i-blog.csdnimg.cn/blog_migrate/16ee6da7f9bda0bb103f2e4adc1f67b8.png)
第二步:编写配置文件内容
--注意:
[1] SpringBoo启动的时候加载的是 application.properties配置文件,再通过application.properties配置文件的 spring.profiles.active属性指定加载的其他配置文件。
[2] 其他配置文件的文件名格式为: application-XXX.properties。
![40dc5b3a32d4654e0fd311ec4971d187.png](https://i-blog.csdnimg.cn/blog_migrate/58af9b8508ae1edb313ebb57f924d3d0.jpeg)
--application.properties
## 指定加载其他配置文件
spring.profiles.active=server1,server2
--application-server1.properties
## 端口
server.port=8083
--application-server2.properties
## 设置下上文路径
server.servlet.context-path=/springboot-quickStart-properties
第三步:运行项目
--成功结果
![fed86fa2aa25dd131f9b4cdda6d94b4a.png](https://i-blog.csdnimg.cn/blog_migrate/6dba499a2e1796dac3b3ba10c012af4d.jpeg)
2.2.2. Yml 配置步骤
第一步:编写三个 yml 配置文件
![b7453b0ea1fa2cc225899a67472df36f.png](https://i-blog.csdnimg.cn/blog_migrate/73b41f2b367cdc733ddb712f9e513b42.png)
第二步:分别编写配置信息
--注意:
[1] SpringBoot启动的时候加载的是 application.yml 配置文件,再通过application.yml配置文件的 spring.profiles.active属性指定加载的其他配置文件。
[2] 其他配置文件的文件名格式为: application-.yml。
![a89c9d6334969d7c53fabc0ab2b2c1de.png](https://i-blog.csdnimg.cn/blog_migrate/0935b477eb3816609cc44e5398fe0544.png)
--application.yml
## 指定加载其他配置文件
spring:
profiles:
active: server1,server2
--application-server1.yml
## 端口
server:
port: 8084
--application-server2.yml
## 设置下上文路径
server:
servlet:
context-path: /springboot-quickStart-yml
第三步:启动测试
--成功结果
![99292b7fd264eebc23a84ac14bb66e81.png](https://i-blog.csdnimg.cn/blog_migrate/f52120c3b18f2143e98b4d97c850dfcd.jpeg)
3. SpringBoot 运行原理
--问题:经过上一节课的学习,我们知道SpringBoot内置已经整合了很多技术以及功能组件,那么我们如何来记忆学习这些功能组件的属性呢?
通过理解 SpringBoot运行流程图,来理解功能组件的属性是放在哪里的,通过边学边找的方式来记忆规律。
--如图所示:
![91109cc406b9c068d7bbcfe0c463cb65.png](https://i-blog.csdnimg.cn/blog_migrate/3002eae685a693cca32588d12555938b.jpeg)
**启动流程:
第一步:SpringBoot通过加载贴在入口执行类上面的@SpringBootApplication注解,来启动 SpringBoot 项目。
第二步:根据贴在@SpringBootApplication注解上的三个注@SpringBootConfiguraton、 @EnableAutoConfiguration、@ComponentScan,来加载SpringBoot配置类、自动加载的配置类、组件类。
**3个注解的功能如下:
@SpringBootConfiguraton:标识一个类是配置类。 @EnableAutoConfiguration:标识这是一个自动加载的配置类,在SpringBoot启动的时候就自动加载配置类中的组件到容器中。 @ComponentScan:标识需要组件扫描的包,在SpringBoot中,包扫描给入口类所在包及其入口类的子包。
**注意事项:SpringBoot内置支持的组件在spring-boot-autoconfigure-2.2.2.RELEASE.jar 里面。如该包下的jdbc分包下的DataSourceAutoConfiguration:
![4d0617b46381cb12f909ec65d07761d6.png](https://i-blog.csdnimg.cn/blog_migrate/8b3f53a697ee10c34a7f4f96febc4328.png)
其中的EnableConfigurationProperties注解用于加载用户配置的参数信息。
DataSourceProperties的作用就是标识配置文件中那些信息是DataSource使用的,标识的方式就是使用“spring.datasource”前缀。
![3256db660431f682f263fb4f8222fd20.png](https://i-blog.csdnimg.cn/blog_migrate/75e9f568e30e042beca9e7e1b062b6f4.png)
--根据分析,可以得出结论:自动加载的配置类信息都在 XxxAutoConfiguration里面,配
置的属性参数都在XxxxxProperties里面。
--执行原理图:
![7af971bd5345f365203065c35c4e4aa8.png](https://i-blog.csdnimg.cn/blog_migrate/1f6c5a5126813252141e85edac9ba5dd.jpeg)
**总结:通过执行原理图,可以知道SpringBoot是如何实现自动配置的。