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优先级高

相关推荐

  1. yaml学习笔记

    2024-07-19 05:48:03       43 阅读
  2. 若依框架学习-springboot-gateway笔记

    2024-07-19 05:48:03       37 阅读
  3. Spring学习笔记)AOP介绍

    2024-07-19 05:48:03       38 阅读
  4. SpringBootYAML文件的使用

    2024-07-19 05:48:03       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 05:48:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 05:48:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 05:48:03       62 阅读
  4. Python语言-面向对象

    2024-07-19 05:48:03       72 阅读

热门阅读

  1. 手机日历如何与Outlook同步

    2024-07-19 05:48:03       21 阅读
  2. IPython:提升Python编程体验的魔法工具

    2024-07-19 05:48:03       17 阅读
  3. Python中的构造方法、析构方法和__str__方法

    2024-07-19 05:48:03       18 阅读
  4. Perl 语言的特点

    2024-07-19 05:48:03       23 阅读
  5. Spark SQL----CREATE TABLE

    2024-07-19 05:48:03       16 阅读
  6. IntelliJ IDEA 和 Eclipse的区别

    2024-07-19 05:48:03       24 阅读
  7. 【Android】基础—基本布局

    2024-07-19 05:48:03       15 阅读