在上篇文章中,我们简单讲解了下
Yaml
的语法格式,那么接下来我们就要将其运用到实际开发中。
Yaml优点
多、快、好、省
配置文件
当我们新建一个SpringBoot项目时,SpringBoot会自带一个配置文件.
application.properties
通常我们要将一些配置信息放到这个文件中,比如说更改项目环境,和端口。
server.port=8080
spring.profiles.active=dev
这些配置项目前看起来还比较整洁,但是当我们配置项多时,难免会乱。
比如说后期拦截器
SpringMvc配置
Mybatis配置
等 。。 会让这个文件变得不堪。
使用Yaml配置文件
为了解决上面的问题
Yaml
横空出世。
使用方法:
- 删掉
application.properties
文件 - 在
src/resource
目录下新建application.yml
文件 - 在
application.yml
文件中写我们的配置文件即可
server:
port: 8081
spring:
profiles:
active: dev
瞬间整个项目逼格提升了不少有木有。
注意: 虽然 叫做 yaml 但是 通常 我们的文件后缀为
*.yml
,别问我为啥,我也不晓!
读取Yaml
在某些情况下我们要读取yaml中的配置信息,比如说判断当前版本是否是 dev
@SpringBootTest
class ProjectEnv{
@Value("${spring.profiles.active}")
private String env;
@Test
public void testIsDev(){
if (env.equals("dev")) {
System.out.println("当前环境是开发环境");
} else {
System.out.println("当前环境是生产环境");
}
}
}
当然这是通过 @Value注解获取的,那么我们要将yaml和实体类绑定到一块该如何做呢?
Yaml绑定实体类
person:
name: "luckyFang"
age: 21
gender: man
@Component
@ConfigurationProperties(prefix = "person")
public class PersonInfoProperties {
private String name;
private int age;
private String gender;
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
我们通过 @ConfigurationProperties
来将实体类和 yaml 中配置文件相绑定,因为用到了spring 的 IOC 所以我们要将这个类 注册成 @Component
组件,然后就大功告成了!
多套配置文件
当我们开发过程中,开发环境和生产环境有可能不同,那么我们就需要进行多套配置文件。
假设业务场景:开发环境服务器端口为8080,生产环境服务器端口为9090。那么我们需要多次更改配置文件就很麻烦。现在只是服务器端口不同,如果后期完全使用两套不同的技术栈,那么我们改动风险更大。
为了避免上面事情的发生 SpringBoot 支持多种配置文件
- application.yml
主配置
- application-dev.yml
开发环境
- application-prod.yml
生产环境
application.yml
# 控制生产环境
spring:
profiles:
active: dev # 开发环境 dev 生产环境 prod
application-dev-yml
server:
port: 8080
application-prod.yml
server:
port: 9090
通过上面这样配置,我们将两套配置分别放到两个不同的文件中,然后在主配置文件中选择加载即可。