介绍

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

1、YAML 以数据做为中心,而不是以标记语言为重点。

2、YAML 仍然是一种标记语言,但是和传统的标记语言不一样,是以数据为中心的标记语言。

3、YAML 非常适合用来做以数据为中心的配置文件 [springboot : application.yml]

使用文档

官方文档:https://yaml.org/

yaml for java:https://www.cnblogs.com/strongmore/p/14219180.html

基本语法

  1. 形式为 key: value;注意:后面有空格
  2. 区分大小写
  3. 使用缩进表示层级关系
  4. 缩进不允许使用 tab,只允许空格 [有些地方也识别 tab , 推荐使用空格]
  5. 缩进的空格数不重要,只要相同层级的元素左对齐即可
  6. 字符串无需加引号
  7. yml 中, 注释使用 #

数据类型

字面量

字面量:单个的、不可再分的值。date、boolean、string、number、null

保存形式为 key: value 如图

对象

对象:键值对的集合,比如 map、hash、set、object

#行内写法: 
k: {k1: v1,k2: v2,k3: v3}

#换行写法
k:
  k1: v1
  k2: v2
  k3: v3

image-20220730103104084

数组

数组:一组按次序排列的值,比如 array、list、queue

#行内写法: 
k: [v1,v2,v3] 
hobby: [打篮球, 打乒乓球, 踢足球]

#换行格式
k:
  -v1
  -v2
  -v3

应用实例

创建新的SpringBoot项目 configuration

配置 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lzw</groupId>
    <artifactId>configuration</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--导入springboot父工程-规定写法-->
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.5.3</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <!--
                配置optional为true
                说明: 表示防止将此依赖传递到其它模块
            -->
            <optional>true</optional>
        </dependency>
    </dependencies>

</project>

创建 src/main/java/com/lzw/springboot/bean/Car.java

package com.lzw.springboot.bean;

import lombok.Data;

/**
 * @author LiAng
 */
@Data
public class Car {
    private String name;
    private Double price;
}

创建 src/main/java/com/lzw/springboot/bean/Monster.java

package com.lzw.springboot.bean;

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

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author LiAng
 */
@ConfigurationProperties(prefix = "monster")
@Component
@Data
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, Object> wife;
    private Set<Double> salaries;
    private Map<String, List<Car>> cars;
}

创建 src/main/resources/application.yml

monster:
  id: 100
  name: 牛魔王
  age: 500
  isMarried: true
  birth: 2000/11/11

创建 src/main/java/com/lzw/springboot/controller/HiController.java

package com.lzw.springboot.controller;

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

import javax.annotation.Resource;

/**
 * @author LiAng
 */
@RestController
public class HiController {

    @Resource
    private Monster monster;

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

创建 src/main/java/com/lzw/springboot/Application.java

package com.lzw.springboot;

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

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

启动项目

修改 application.yml

monster:
  id: 100
  name: 牛魔王
  age: 500
  isMarried: true
  birth: 2000/11/11
  #对象
  #car: {name: 宝马,price: 200000} #行内格式
  car:
    name: 宝马
    price: 300000
  #数组
  #skill: [芭蕉扇,牛魔拳] # 行内格式
  skill:
    - 芭蕉扇~
    - 牛魔拳~
  #  hobby: [喝酒, 吃肉] #行内格式
  hobby:
    - 喝酒~
    - 吃肉~
  #map-属于对象
  #  wife: {no1: 玉面狐狸, no2: 铁扇公主} #行内风格
  wife:
    no1: 玉面狐狸~
    no2: 铁扇公主~
  #  salaries: [10000,20000] #行内风格
  salaries:
    - 10000
    - 20000
  cars: #因为cars k-v v是list<Car> 所以我们使用换行风格
    group1:
      - {name: 奔驰, price: 300000}
      - name: 保时捷
        price: 400000
    group2:
      - {name: 奔驰~, price: 100000}
      - name: 保时捷~
        price: 500000

image-20220730110531415

注意事项和细节

  1. 如果 application.properties 和 application.yml 有相同的前缀值绑定,则 application.properties 优先级高,开发时,应当避免。
  2. 字符串无需加引号。
  3. 解决 yaml 配置文件,不提示字段信息问题

修改 pom.xml

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

如果还没有提出提示,可以安装一个 yaml 插件来搞定YAML/Ansible support

原文地址:http://www.cnblogs.com/liangnice/p/16852270.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性