- 配置文件的作用:修改SpringBoot自动配置的默认值,SpringBoot在底层都给我们自动配置好了
application.properties全局配置文件&yml配置文件
1、yml以数据为中心,比json和xml更适合做数据型配置文件,如yml文件的基本语法如下
以k:v来表示一对键值对(在:后面必须加空格)。
以空格的缩进来控制层级关系,只要左对齐的一列数据,都是属于同一层级的。
属性和值是严格区分大小写。
2、值的写法:都是可以用k:v的形式来写
数字、字符串、布尔值: 直接写
数组: 数组可以使用行内写法:list: [a,b,c]
对象、Map():对象可以使用行内写法:
person: {name:xxx, age:xxx, sex:xxx, ...}
1 | server: |
yml配置文件值的获取
- @ConfigurationProperties(prefix = “配置文件中的配置数据值”),即可将配置文件中配置的每一个属性的值都映射到带有这个注解的组件类中
1 | //在类定义前必须加上@Component来标注这个类是一个组件,只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能 |
- 在组件类定义的前面加@ConfigurationProperties注解可以将组件类的所有属性和配置文件中相关的配置进行绑定
@ConfigurationProperties和@Value的区别
- @Value是加在类的属性之前,和@ConfigurationProperties一样,能将配置文件的数据和属性绑定起来,也能在组件类中指定值,但@Value只能绑定一个属性,使用的形式:@Value(“…”)
1 |
|
- 区别:
- | @ConfigurationProperties | @Value |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定 | 支持 | 不支持 |
表达式 | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
- 如果只是在某个业务逻辑中需要获取一个配置文件中的某项值,使用@Value;如果专门编写了一个JavaBean来和配置文件进行映射,就直接使用@ConfigurationProperties
@PropertySource
- 加载指定的配置文件
- @ConfigurationProperties默认是加载application.properties全局配置文件,而@PropertySource可以加载指定的配置文件
- 例如,在Person类定义的前面加上@PropertiesSource(value = {“classpath:person.properties”}),Person类就会加载resources目录下的person.properties,将配置文件的数据绑定到类的属性中
@ImportResource
导入Spring的配置文件,让配置文件里面的内容生效;Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;想让Spring的配置文件生效、加载起来,就需要把@ImportResource标注在一个配置类上。
SpringBoot推荐给容器中添加组件的方式:使用全注解的方式
1、配置类=====Spring配置文件,在SpringBootApplication类中使用@ImportResource注解指定配置文件的路径
1 | "classpath:bean.xml"}) (locations = { |
2、使用@Bean给容器中添加组件(推荐方式)
1 | /* |
配置文件占位符
1、随机数
- 形式:${random.value},value可以是int、int(n)、long和int[n, m](n到m的随机数)等等。
2、占位符获取之前配置的值,若没有可以用指定的默认值
- 形式:${之前配置的值对应的key}
Profile
1、多Profile文件
- 我们在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml,默认使用application.properties,可以在默认配置文件中用spring.profiles.active=xxx来激活使用的配置文件,例如在application.properties下写spring.profiles.active=dev,Spring就会使用application-dev.properties作为它的配置文件,这样就可以灵活地在多个环境下的不同配置信息进行切换。
1 | dev = |
1 | server.port=8081 |
1、yml多文档块
1 | #默认的配置(文档块一) |
激活指定的profile方式
spring.profiles.active=xxx来激活配置
在EditConfiguration设置里面点开SpringBoot先选定你想要设置的项目,然后修改Active profiles选项,即可修改profile配置。
命令行方式:java -jar spring-boot-01-helloworld-quick-0.0.1-SNAPSHOT.jar –spring.profiles.active=dev直接在命令行传入参数指定profile
配置文件加载的位置
1、内部配置文件加载位置
2、外部配置文件加载顺序
自动配置原理
配置文件到底能写什么?怎么写?
1、原理
SpringBoot启动的时候加载主配置类,开启自动配置功能@EnableAutoConfiguration
@EnableAutoConfiguration的作用:
使用AutoConfigurationImportSelector给容器中导入一些组件
AutoConfigurationImportSelector使用
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
来获取候选的配置getCandidateConfigurations使用了SpringFactoriesLoader来将类路径下的”META-INF/spring.factories”EnableAutoConfiguration里面所有的配置的值加入到容器中,每一个xxxAutoConfiguration类都是容器中的一个组件,它们都会进行一个自动配置(自动配置功能),然后加入到容器中
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ |
- 下面以HttpEncoding的自动配置原理来进行讲解:
Conditional派生注解和自动配置报告
1、Conditional派生注解
2、自动配置报告
- 可以在配置文件中设置debug的值来让springboot生成自动配置报告,即写上debug=true(默认为false)
1 | ============================ |
- 在使用自动配置类属性时的精髓:
参考视频:B站
感谢观看