全局配置文件
application.properties、application.yml(以数据为中心)。
用于修改springboot默认配置 。
基本语法
1. 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一层级。
2. 使用注解@Component @ConfigurationProperties(prefix = “user”)与对象绑定
使用注解@PropertySource(value={"classpath:person.properties"})关联指定文件
3. 值的写法
yml
字面量:普通的值(数字,字符串,布尔)
字符串:默认不用加上,单引号(转义字符)或者双引号(不转义字符);
对象(属性和值)、Map(键值对);
k: v :在下一行来写对象的属性和值得关系,注意缩
user:
userName: zhangsan
age: 17
行内写法:
user: {userName: zhangsan,age: 17}
map: {k1: v1,k2: v2}
数组(List、Set):
pets:
- cat
- dog
- pig
行内写法:pets: [cat,dog,pig]
properties
user.userName=zhangsan
user.age=17
map.k1=v1
map.k2=k2
list=a,b,c
user.dog.name=dog
4. 随机数:user.age=${random.int}
user.userName=zhangsan${random.uuid}
占位符:user.dog.name=${user.userName}_dog
user.dog.name=${user.userName:liuer}_dog //如果取不出值则使用liuer
4. 导入 spring-boot-configuration-processor 包 ,添加配置文件提示
注解:
@ImportResource:导入Spring的配置文件,加在主程序上
@Configuration:标明配置类,
Profile 多环境支持,用于不同环境
1. 多profile文件形式:
application-dev.properties 、application-dev.properties
2.yml支持多文档块方式
3.激活指定profile:
1.配置参数 spring.profies.active=dev
2.命令行--spring.profiles.active = dev
打包命令行方式
3. jvm参数-Dspring.profiles.active=dev
配置文件加载优先级
外部配置加载顺序
由高到低,高覆盖低,所有文件形成互补
自动配置原理
原理:
总体思路是根据主程序注解加载配置类,配置类使用注解启动属性配置类,属性配置类使用注解与配置文件关联。程序启动时,从属性配置类从配置文件中取值,配置类从属性配置类中取值。
-> @SpringBootApplication // 主程序注解
->@EnableAutoConfiguration // 主程序注解自动配置注解
->@AutoConfigurationPackage@Import({AutoConfigurationImportSelector.class}) //利用AutoConfigurationImportSelector.class导入自动配置类
-> AutoConfigurationImportSelector.class 调用 SpringFactoriesLoader.loadFactoryNames()获取META-INF 目录下的spring.factories,spring.factories包含了自动配置类xxx.AutoConfiguration ,自动配置类通过属性配置类xxx.Properties获取配置信息;
Enumeration<URL> urls =classLoader
!= null ? classLoader.getResources("META-INF/spring.factories") :ClassLoader.getSystemResources("META-INF/spring.factories");
LinkedMultiValueMap result = new LinkedMultiValueMap();
自动配置类
属性配置类
属性配置类通和.properties文件映射,从.properties文件中获取值
@Conditional 注解
查看自动配置启用的组件