配置文件
springboot使用一个全局的配置文件,配置文件的名称是固定的
默认是这个东西:application.properties
语法:key=value
application.yml
语法:key:(空格)value
yaml概述
yaml仍是一种标记语言
它是以数据为中心,标记语法是次重点
传统XML
<server>
<port>8081<port>
</server>
yaml
server:
prot: 8080
你打一个回车下面就自动缩进了
基础语法
1、空格不能省略
2、以缩进来控制层级关系
3、属性和值的大小写很关键
普通的值:【数字、布尔值、字符串】
happy: false
注意:
“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
'' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
对象、map键值对:
name(对象名或map集合名):
k1: v1
k2: v2
name: {k1: v1,k2: v2}
两种写法
数组和集合或对象的书写有点差异
pets:
-pet1
-pet2
pets: [pet1,pet2]
也是两种写法
那么yaml文件我们会写了如何注入到类中呢?
对于一个类而言,我么只需要给他添加注解就行了。
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix = "person")
@Validated
中间的三个大家应该很熟悉吧,就是lombok的注解,就是给他添加有参无参构造器,和get、set,equals、toString、hashCode等方法。
最上面的就是把该类注解为一个spring的组件
@Con……这个注解是关键,prefix赋给yaml中的名字。
@Validated是yml做数据校验时的注解
有了这些注解,你就可以在测试类中调用了。
不过还需要手动到pom中添加支持:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
不添加也能运行,就是该实体类上面会有报错提示。
这些是使用yml的用法
如果你要用properties的话。
注解只需要将
@ConfigurationProperties(prefix = "你在yml中起的名字")
修改为
@PropertySource(value = "classpath:文件名.properties")
然后对每个属性进行 @Value(${el表达式})
依次赋值,就很麻烦
然后yml位置文件的话,还可以使用占位符:
例如
${random.uuid} # 随机uuid
${person.hello:other} #person.hello存在的话(就是指在yaml文件中配置过)该值就是person.hello,不存在就是other,当然后面也可以拼接其他的字符串
总结对比
properties | yaml | |
注解 | @PropertySource(value = "classpath:person.properties") 并且需要@Value() 进行一个个赋值 | @ConfigurationProperties(prefix = "person") |
spel | 支持 | 不支持 |
数据校验 | 不支持 | 支持(即增加一层过滤器验证) |
复杂数据类型封装 | 不支持 | 支持(即可以封装对象) |
松散绑定 不支持 支持