yaml/yml语法
spring官方推荐使用application.yaml代替application.properties,因为yaml更加强大
properties语法:key=value ,例如
server.port=8080
yaml语法:key:空格value,例如
server:
port: 8080
yaml基础语法
- 对空格要求严格,不能省略
- 以缩进控制层次结构,左对齐的属于同一层次
- 大小写敏感
“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
比如 :name: “kuang \n shen” 输出 :kuang 换行 shen
‘’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
比如 :name: ‘kuang \n shen’ 输出 :kuang \n shen
对象
student:
name: abc
age: 18
//或者
student {name: abc,age: 18}
list
fruits:
- apple
- organge
- banana
//或者
fruits: [apple,orange,banana]
yaml注入配置文件
创建application.yaml,以上述对象为例
student:
name: abc
age: 18
新建一个实体类Student
@Components //注册bean到容器中
Public class Student{
private String name;
private int age;
//set,get方法,toSting方法,有参无参构造函数
}
以往给bean注入属性值的方法
Public class Student{
@value("abc")
private String name;
private int age;
}
用yaml的方法
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “student” : 将配置文件中的student下面的所有属性一一对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "student")
Public class Student{
private String name;
private int age;
//set,get方法,toSting方法,有参无参构造函数
}
如果出现IDEA 提示,springboot配置注解处理器没有找到,则需要在poem.xml中写入依赖文件
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
然后在测试类测试
@SpringBootTest
class DemoApplicationTests {
@Autowired
Student student; //将student自动注入进来
@Test
public void contextLoads() {
System.out.println(student); //打印student信息,得到student.name=abc,student.age=18
}
}
yaml可以方便选择多环境配置
使用properties需要创建多个application-xxx.properties,然后在application.properties中选择需要配置的环境
#多环境配置,选择要激活的配置文件
spring.profiles.active=test
使用yaml可以只在一个application中配置多环境
#选择激活配置文件
spring:
profiles:
active: test
---
server:
port: 8081
spring:
profiles: dev
---
server:
port: 8082
spring:
profiles: test
对比
@ConfigurationProperties | @Value |
---|---|
可以批量注入数据 | 只能一个一个注入 |
支持松散语法 | 不支持松散语法 |
支持JSR30数据校验 | 不支持 |
可以封装复杂类型 | 不支持 |
不支持SpEL | 支持 |
1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
2、松散绑定:意思就是 比如yml中写的last-name,和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。
3、JSR303数据校验 , 可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
4、复杂类型封装,yml中可以封装对象 , 使用value就不支持
结论:
配置yml和配置properties都可以获取到值 , 强烈推荐 yml;
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!