1.基本语法
k:(空格)v:表示一对键值对(空格必须有)
以空格的缩进来控制层级的关系;只要是左对齐的一列数据,都是同一层级的
server:
port:8081
path:/hello
属性和值都是大小写敏感的
2.值的写法
字面量:普通的值(数字,字符串,布尔)
k:v :字面直接来写;
字符串默认不用加上单引号或者双引号
" ":双引号;不会转义字符串里面的特殊字符;特殊字符作为本身想表示的意思
name:“zhangsan\n lisi”:输出; zhangsan 换行 lisi
’ ’ :单引号;会转义特殊字符,特殊字符串最终只是一个普通的字符串数据
name:“zhangsan\n lisi”:输出; zhangsan \n lisi
对象:(属性和值)(键值对):
k:v :在下一行来写对象的属性和值 的方式
对象还是k:v的方式
friends:
lastName:zhangsan
age : 20
行内写法:
friends :{lastName:zhangsan ,age:18}
数组(list,Set)
pets
- cat
- dog
- pig
行内写法
pets:[cat,dog,pig]
3.配置文件值注入
配置文件
person:
lastName: zhangsan
age: 18
boss: false
birth: 2017/12/12
maps: {k1:v1,k2:12}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 2
javaBean
/*
将配置文件中配置的每一个属性的值,映射到这个组件中
@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
prefix = "person":配置文件中哪个下面所有属性进行一一映射
只有这个组件是容器中的组件,才能容器提供@ConfigurationProperties功能
*/
@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
我们可以导入配置文件处理器,以后 编写配置就有提示了
<!--配置文件提示 导入配置文件处理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
配置文件值注入:
1.解决properties配置文件在idea中默认utf-8可能会乱码
2.@Value获取值和@ConfigurationProperties获取值比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定 | 支持 | 不支持 |
SPEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
配置文件yml还是properties他们都能获取到值
如果说,我们只是在某个业务逻辑中需要获取以下配置文件中的某项值,使用@Value
如果说,我们专门编写一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties
3.配置文件注入值数据校验
@Data
@Component
//@ConfigurationProperties(prefix = "person")
public class Person {
/**
* <bean class="Person">
* <property name="lastName" value="字面量"/${key}从环境变量,配置文件中获取值/#{SpEl}"></property>
* <bean/>
*/
@Value("${person.last-name}")
private String lastName;
@Value("#{11*2}")
private Integer age;
@Value("true")
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
4.配置文件加载位置
springboot启动扫描以下位置的application.properties或者application.yml文件作为Springboot默认配置文件
-file:…/config/
-file:…/
-classpath:/config/
-classpath:/
优先级由高到低,高优先级的配置会覆盖低优先级的配置
SpringBoot会从这四个位置全部加载主配置文件;互补配置
我们还可以通过spring.config.location来改变默认的配置文件位置
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的位置;指定配置文件和默认加载这些配置文共同起作用形成互补配置;
5.外部配置加载顺序
SpringBoot也可以从以下位置加载配置;优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置
1)命令行参数
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
多个配置用空格分开;–配置项=值
2)优先加载带profile
jar包外部的application-{profile}.properties或application.yml{带spring.profile}配置文件
jar包内部的application-{profile}.properties或application.yml{带spring.profile}配置文件
再来加载不带profile
jar包外部的application.properties或application.yml(不带spring.profile)配置文件
jar包内部的application.properties或application.yml(不带spring.profile)配置文件