Springboot 配置文件之 Yaml

一、Springboot 配置文件简介

Springboot 是基于配置进行管理的,由于 Springboot 底层都帮我们配置好了相关的模块,如果我们需要修改自动配置的默认行为该怎么办呢?这个时候我们就需要通过修改Springboot 的配置文件来实现了,Springboot 的默认的全局配置文件有两种,一种是 application.properties ,另外一种是 application.yml(或者application.yaml).这里,我们就简单说一下 Yaml 的简单实用

二、Yaml 的特点及语法

Yaml 是一种以数据为中心的配置文件,里面的配置基本都是数据,很少有类似于 xml 的开、闭标签等无关数据的配置,所以它比 Json、Xml 更适合做配置文件

Yaml 语法格式如下

key:(空格)value

Yaml 是以空格的缩进来控制层级关系的,只要是左对齐的一列数据,代表的是同一层级的.其中 key 和 value 对大小写敏感.例如 server 下的 port 和 path 就是同一层级的数据

server:
    port:8081
    path:/hello

  

三、Yaml 的值的写法

1、字面量:普通的值(数字、字符串、布尔值) 

字符串默认是不用加上单引号或者是双引号的,如果要加上的话,单引号和双引号还是有一点区别的

单引号:例如 name:'xiaomaomao hello' 它是不会进行转义的,最终输出的结果就是 xiaomaomao hello

双引号:例如 name:"xiaomaomao hello" 它会进行转义,最终输出的结果就是 xiaomaomao 换行 hello

name: xiaomaomao
age: 21
height: 157.00

2、数组

// 基本写法,代表数组 hobby 中有三个元素 LOL、KFC、COFFE
hobby:
    - LOL
    - KFC
    - COFFE

// 行内写法
hobby: [LOL,KFC,COFFE]

3、对象和 Map 集合

// 一般写法
name: Husky
      age: 2
      color: gray

// 行内写法
{name: Husky,age: 2,color: gray}

4、list 集合

// 一般写法
pets:
    -
      name: Husky
      age: 2
      color: gray
    -
      name: persian
      age: 3
      color: orange

// 行内写法
pets:
   - {name: Husky,age: 2,color: gray}
   - {name: persian,age: 3,color: orange}

  

四、案例

1、配置文件 resources/config/application.yaml

person:
  name: xiaomaomao
  age: 21
  height: 157.00
  hobby:
    - LOL
    - KFC
    - COFFE
  pets:
    -
      name: Husky
      age: 2
      color: gray
    -
      name: persian
      age: 3
      color: orange
  featureLevel:
    clever: 10
    lovely: 8
    funny: 8

2、实体类 Person

@Configuration
// 将 person 下级的 key 与实体类中的属性进行映射绑定,并为其注入属性值
@ConfigurationProperties(prefix = "person")
// 加载指定位置的 properties 配置文件
@PropertySource("classpath:config/application.yaml")
// 该类省略了 set/get 方法
public class Person {
    // 基本数据类型的属性
    private String name;
    private Integer age;
    private double height;
    // 数组
    private String[] hobby;
    // List 集合
    private List<Pet> pets;
    // Map 集合
    private Map<String, String> featureLevel;
}

3、实体类 Pet (省略 get/set/toString)

public class Pet {
    private String name;
    private String age;
    private String color;
}

4、测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot01ApplicationTests {
    @Autowired
    private ApplicationContext ioc;

    @Test
    public void testProperties() {
        Person person = ioc.getBean("person", Person.class);
        System.out.println(person);
    }
}

5、测试结果

Person{
	name='xiaomaomao', 
	age=21, 
	height=157.0, 
	hobby=[LOL, KFC, COFFE], 
	pets=[
		Pet{name='Husky', age='2', color='gray'}, 
		Pet{name='persian', age='3', color='orange'}
		], 
	featureLevel={clever=10, lovely=8, funny=8}
}

 

原文地址:https://www.cnblogs.com/xiaomaomao/p/13840978.html