SpringBoot框架学习笔记(四):yaml 介绍及其使用

1 yaml 介绍

百度百科:YAML 是 “YAML Ain't a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),是为了强调这种语言以数据作为中心,而不是以标记语言为中心,而用反向缩略语重命名

解读如下

  • YAML 以数据为中心,而不是以标记语言为重点
  • YAML 仍然是一种标记语言,但是和传统的标记语言不一样,是以数据为中心的标记语言
  • YAML 非常适合用来做以数据为中心的配置文件(springboot:application.yml)

2 使用文档

官方文档(英文): The Official YAML Web Site

java操作yaml文档(中文):java操作yaml文件 - strongmore - 博客园 (cnblogs.com)

3 yaml基本语法

  • 形式为 key: value(:号后面有空格)
  • 区分大小写
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。(有些地方也识别tab,推荐使用空格)
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释,从这个字符一直到行尾,都会被解析器忽略
  • 字符串默认不用加引号,包含空格或特殊字符必须加引号,单引号或双引号都可以

4 数据类型

4.1 字面量

字面量:单个的,不可再分的值。字符串、布尔值、整数、浮点数、Null、时间 

举例:

字符串

userId: S123
username: "lisi"
password: '123456'
province: 山东
city: "济南 : ss"

布尔值

success: true

 整数

age: 13

浮点数 

weight: 75.5

Null 

gender: ~

时间  (时间使用ISO8601标准 ISO8601

createDate: 2001-12-14T21:59:43.10+05     

4.2 对象

对象:键值对的集合

行内写法:

k: {k1: v1,k2: v2,k3: v3}

 多行写法:

k: 
 k1: v1
 k2: v2
 k3: v3

举例:

写在一行

address: {province: 山东, city: 济南}

写在多行

address:
  province: 山东
  city: 济南

 4.3 数值

数值:一组按次序排列的值

行内写法:

k: [v1,v2,v3]

多行写法

k: 
 - v1
 - v2
 - v3

举例:

写在一行

hobbyList: [游泳, 跑步]

写在多行 

hobbyList:
  - 游泳
  - 跑步

5 yaml应用实例

需求说明:使用yaml配置文件 和 JavaBean 进行数据绑定,体会yaml使用方式

(1)创建一个新的SpringBoot项目-configuration

(2)在 pom.xml 文件中加入以下依赖

<!-- 导入 springboot 父工程,规定的写法 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.3</version>
</parent>
<dependencies>
    <!-- 导入 web 项目场景启动器,会自动导入和 web 开发相关依赖,非常方便 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.28</version>
    </dependency>
</dependencies>

(3)在src/main/java目录下创建包 com.springboot.bean,在bean包下创建实体类 Car.java

package com.springboot.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;

@NoArgsConstructor
@AllArgsConstructor
@Data
@Component
public class Car {
    private String name;
    private Double price;
}

(4)(核心)在包 bean 下创建实体新的实体类 Monster.java

说明:在类上加上注解 @ConfigurationProperties 即可绑定yaml文件中的值,前缀为键值对中的 key

package com.springboot.bean;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.*;

@NoArgsConstructor
@AllArgsConstructor
@Data
@Component
// 使用@ConfigurationProperties 即可绑定yaml文件中的值,前缀为键值对中的 key
@ConfigurationProperties(prefix = "monster")
public class Monster {
    private Integer id;
    private String name;
    private Integer age;
    private Boolean isMarried;
    private Date birth;
    private Car car;
    private String[] skill;
    private List<String> hobby;
    private Map<String, String> wife;
    private Set<Double> salaries;
    private Map<String, List<Car>> cars;
}

(5)在包 com.springboot 下创建软件包 controller,在controller包下创建 HiController.java

package com.springboot.controller;

import com.springboot.bean.Monster;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

// @RestController = @Controller+ @ResponseBody
@RestController
public class HiController {

    @Resource
    private Monster monster;

    @RequestMapping("/monster")
    public Monster monster(){
        return monster;
    }

}

(6) (核心)在resources 目录下创建yaml文件 application.yml。文件后缀为 yaml 、yml 均可

monster:
  id: 100
  name: 牛魔王
  age: 500
  isMarried: true
  birth: 2000/11/11
  car: {name: 宝马, price: 200000}
  skill:
    - 芭蕉扇
    - 牛魔王
  hobby: [喝酒,吃肉]
  wife:
    no1: 玉面狐狸
    no2: 铁扇公主
  salaries: [20000,30000]
  cars:
    # key不能为中文
    group1:
      - {name: 宝马, price: 400000}
      - {name: 奔驰, price: 300000}
    group2:
      - {name: 迈巴赫, price: 300000}
      - {name: 奥迪, price: 300000}

 (7)在包 com.springboot 下创建主程序Application.java

package com.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

(8)启动主程序,在浏览器输入 http://localhost:8080/monster 进行测试,效果如下

测试完成!yaml 文件中的数据成功绑定到bean中 

6 yaml使用细节

如果application.properties 和 application.yml 有相同的前缀值绑定,则application.properties优先级高

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值