SpringBoot中yaml(yml)的使用

什么是yaml

yaml通俗来讲就是一种符合某种规范的数据的格式,类似xml、json,因为springboot的核心是自动装配,因此可以自动识别配置文件中特定格式的配置,而yaml相比于properties配置清晰而优点众多,因此springboot推荐使用yaml来进行配置。

yaml语法规范

以下我们用一个实体类来做示范来说明yaml的语法规范

  • 创建实体类Dog(偷懒使用lombok),添加@Component注解说明。
    lombok传送门
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dog {
    private String name;
    private int age;
}
  • 创建Person类,添加@Component注解说明,使用@ConfigurationProperties(prefix = “person”)绑定对应的yaml配置装配的类。
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
@ConfigurationProperties(prefix = "person") //绑定yaml
@Validated //数据校验
public class Person {
    private String name;
    private int age;
    private Boolean marry;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}
  • 使用yaml给Person类赋值。
person:
  name: 小明
  age: 3
  marry: false
  birth: 2020/06/21
  maps: {k1: v1,k2: v2}
  lists:
    - 唱歌
    - 跳舞
    - rap
  dog:
    name: 旺财
    age: 1
  • 使用@Autowired自动装配并测试
@SpringBootTest
class Springboot02ConfigApplicationTests {

    @Autowired
    private Person person;
    @Test
    void contextLoads() {
        System.out.println(person);
    }
}

结果输出:
Person(name=小明, age=3, marry=false, birth=Sun Jun 21 00:00:00 CST 2020, maps={k1=v1, k2=v2}, lists=[唱歌, 跳舞, rap], dog=Dog(name=旺财, age=1))

JSR303校验

根据上面示例在类上面添加@Validated 注解用来数据校验,则可以在对应的成员变量上添加一些条件来限制注入的值。
常用注解:
SpringBoot中yaml(yml)的使用_第1张图片

配置文件优先级

springboot中很多地方都可以创建配置文件并且生效,他们之间的优先级为:

  • file:./config/ (当前项目路径config目录下);
  • file:./ (当前项目路径下);
  • classpath:/config/ (类路径config目录下);
  • classpath:/ (类路径config下).

而创建项目时默认的配置为配置优先级最低的classpath:/(resources/application.*),任何地方增加配置文件均可覆盖默认配置。

多文件配置与yaml设置

在yaml中也可以分文档,只需要使用 - - - 则可以配置不同环境的参数,使用spring.profiles命名,不使用为默认,需要更换环境只需要使用spring.profiles.active进行激活即可。
例如不同环境配置不同端口,application.yaml配置如下:

spring:
  profiles:
    active: test
---
server:
  port: 8081
---
server:
  port: 8082
spring:
  profiles: dev
---
server:
  port: 8083
spring:
  profiles: test

只需要使用active激活对应配置,即可动态修改配置。

你可能感兴趣的:(SpringBoot中yaml(yml)的使用)