介绍
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
基本语法
- 形式为 key: value;注意:后面有空格
- 区分大小写
- 使用缩进表示层级关系
- 缩进不允许使用 tab,只允许空格 [有些地方也识别 tab , 推荐使用空格]
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- 字符串无需加引号
- 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
数组
数组:一组按次序排列的值,比如 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
注意事项和细节
- 如果 application.properties 和 application.yml 有相同的前缀值绑定,则 application.properties 优先级高,开发时,应当避免。
- 字符串无需加引号。
- 解决 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. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性