SpringBoot 使用Yaml配置文件

后端 / 2020-08-09

在上篇文章中,我们简单讲解了下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

通过上面这样配置,我们将两套配置分别放到两个不同的文件中,然后在主配置文件中选择加载即可。