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 就是同一层级的数据

1
2
3
server:
    port:8081
    path:/hello

  

三、Yaml 的值的写法

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

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

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

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

1
2
3
name: xiaomaomao
age: 21
height: 157.00

2、数组

1
2
3
4
5
6
7
8
// 基本写法,代表数组 hobby 中有三个元素 LOL、KFC、COFFE
hobby:
    - LOL
    - KFC
    - COFFE
 
// 行内写法
hobby: [LOL,KFC,COFFE]

3、对象和 Map 集合

1
2
3
4
5
6
7
// 一般写法
name: Husky
      age: 2
      color: gray
 
// 行内写法
{name: Husky,age: 2,color: gray}

4、list 集合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 一般写法
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@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)

1
2
3
4
5
public class Pet {
    private String name;
    private String age;
    private String color;
}

4、测试类

1
2
3
4
5
6
7
8
9
10
11
12
@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、测试结果

1
2
3
4
5
6
7
8
9
10
11
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}
}

 

 

posted @   变体精灵  阅读(457)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示