配置文件
SpringBoot使用一个全局的配置文件,配置文件有两种形式
- application.properties
- appliciation.yml
k:v :在下一行来写对象的而实行和值得关系,注意缩进
对象还是k:v的方式
@Value和@ ConfigurationProperties获取值得区别
@ ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(例:last-name/lastName) | 支持 | 不支持 |
SpEL(例:计算公式) | 不支持 | 支持 |
JSR303数据校验(例:规定数据格式@Email) | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
总结: 配置文件yml还是properties都能获取到值;
如果,只是在某个业务罗矩阵需要获取配置文件中得某项值,使用@Value
如果,我们专业编译了一个javaBean来和配置文件进行映射@ ConfigurationProperties;
@PropertySource:加载指定的配置文件
@PropertySource(valiue= {"classpath:person.properties"})
@ImportResource
导入Spring的配置文件,让配置文件里的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别,想让Spring的配置文件生效加载进来;
@ImportResource(locations = {“classpath:beans.xml”})
导入Spring 的配置文件让让其生效
@Profile
1.多Profile文件
在主配置文件编写的时候,文件名可以使application-{Profile}.properties/yml 默认使用application.properties的配置
2.yml支持多文档块方式
server:
port:8081
spring:
profiles:
active:prod //此时激活的是prod方式
---
server:
port:8083
spring:
profiles:dev
---
server:
port:8084
spring:
profiles:prod
3.激活制定Profile
-
在配置文件中制定 spring.profiles.active=dev
-
命令行:
(打包后) java -jar spring-boot-02-config-0.01-SNAPSHOT.jar --spring.profiles.active=dev;
或者直接在测试时,配置传入命令行参数
3.虚拟机参数
配置文件加载位置
springboot启动会扫描一下位置的application.properties或application.yml文件作为 Spring boot 的默认配置
-file:./config/
-file:./
-classpath:/config/
-classpath:/
以上是按照优先级从高到低的顺序,所有未知的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容;互补配置
== 也可以通过spring.config.location来改变默认的配置文件位置==
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些文件共同起作用形成互补配置!
------------------------------------------------------------------------------------------------------------------------------
自动配置原理
1.Springboot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration
2.@EnableAutoConfiguration作用:
- 利用EnableAutoConfigurationImportSelector给容器中导入组件
- 可以加减selectImports()方法的内容
- List configurations=getCandidateConfigurations(annotationMetadata, attributes);获取候选的配置
SpringFactoriesLoader.loadFatoryNames( )
扫描所有jar包类路径下 META-INF/spring.factories
把扫描到的这些文件的内容包装秤properties对象
从properties中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加到容器中
将类路径下 META-INF/spring.factories里面配置的所有的EnableAutoConfiguration的值加入到容器中
每一个这样的 xxxAutoConfiguation类都是容器中的一个组件,都加入到容器中;用他们来做自动配置;
3.每一个自动配置类进行自动配置功能
4.以**HttpEncodingAutoConfiguration(Http编码自动配置)**为例解释自动配置原理
精简 :
1.SpringBoot启动会加载大量的自动配置类
2.看需要的功能有没有SpringBoot默认写好的自动配置类
3.看这个自动配置类中到底配置了那些组件
4.给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。可以在配置文件中指定这些属性的值。
(xxxxAutoConfiguration:自动配置类;给容器中添加组件;;;;xxxxProperties:封装配置文件中相关属性;)