七,Spring Boot 当中的 yaml 语法使用
文章目录
- 七,Spring Boot 当中的 yaml 语法使用
- 1. yaml 的介绍
- 2. yaml 基本语法
- 3. yaml 数据类型
- 4. 学习测试的准备工作
- 4.1 yaml 字面量
- 4.2 yaml 数组
- 4.3 yaml 对象
- 5. yaml 使用细节和注意事项
- 6. 总结:
- 7. 最后:
1. yaml 的介绍
yaml 的基本说明
- YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。[百度百科]
- YAML 是以数据作为中心,而不是以标记语言为重点
- YAML 仍然是一种标记语言,但是和传统的标记语言不一样,是以数据为中心的标记语言
- YAML 非常适合用来做以数据为中心 的配置文件【springboot:application.yml/ application.yaml】
yaml 的官方文档:https://yaml.org/
中文:这是一个博主自己写的:这里推荐一下给大家:https://ww.cnblogs.com/strongmore/p/14219180.html
2. yaml 基本语法
-
yaml 语法的形式为:key: value 注意: key双引号的后面有空格。不可以漏了
-
yaml语法是区分大小写的 ,id 和 ID 不是同一个东东
-
yaml 语法是:使用缩进表示层级关系
-
yaml 语法上的缩进不允许使用 tab 键,只允许使用空格 ,因为不同的编译器,对 Tab 键的格式不同。所以,推荐使用空格
-
缩进的空格数不重要,只要相同层级的元素左对齐即可,也就是相同层级的元素的空格数保持一致即可。
-
yaml 对于字符串,可以不用加引号,当然,你加了引号也不会报错,也可以被识别为字符串。
-
yaml 语法中,注解使用
#
-
注意:yaml中,要编写中文的话,要将项目的编码设置为
utf-8
,不然,在 yaml 中无法识别到中文,会报错。 -
yaml 文件的后缀,可以是
yaml
或者是yml
,两者都是可以的。
3. yaml 数据类型
对于 yaml 来说,数据类型分为三种:
- 字面量
- 对象
- 数组
4. 学习测试的准备工作
首先我们这里准备好需要使用的 两个Bean对象,用于使用 yaml 语法进行属性上的赋值。
这里我使用了 Lombok 插件,简化单例 bean 对象的编写,关于 Lombok 的使用,大家可以移步至:✏️✏️✏️ 六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率-CSDN博客
package com.rainbowsea.springbootyaml.bean;
import lombok.Data;
@Data
public class Car {
private String name;
private Double price;
}
package com.rainbowsea.springbootyaml.bean;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ConfigurationProperties(prefix = "monster")
@Component
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Monster {
private Integer id;
private String name;
private Boolean isMarried;
private Integer age;
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;
}
还有一个 controller 请求处理的控制器
package com.rainbowsea.springbootyaml.controller;
import com.rainbowsea.springbootyaml.bean.Monster;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController // @Controller + @ResponseBody
public class HiController {
//@Resource // 通过 yaml 注入赋值 @Resource 和 Autowired 都可以,因为该bean对象已经被注入到ioc容器当中了
@Autowired
private Monster monster;
@RequestMapping("/monster") // 设置请求的映射路径
public Monster monster(){
return monster;
}
}
最后就是一个应用程序的启动场景了
package com.rainbowsea.springbootyaml;
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);
}
}
4.1 yaml 字面量
字面量:单个的,不可再分的值,比如:date,boolean,string,number,null
保存形式:key: value
注意空格。
monster:
age: 5000
is-married: true
birth: 2000/10/10
name: 牛魔王
id: 100
car: # 换行格式
name: 宝马~
price: 30000
在spring boot 当中,一般将 yaml 的配置文件,放到 类路径下 resources 下。名为application.yaml
/ application.yml
。这里我们以 yml
后缀进行测试。
monster:
age: 5000
is-married: true
birth: 2000/10/10
name: 牛魔王
id: 100
# 对象
# car: {name: 宝马,price: 10000} # 行内格式,不用忽略了空格,里面,和外面的空格
car: # 换行格式
name: 宝马~
price: 30000
运行测试:
特别说明:
想要使用 yaml 的配置文件,赋值到对应的bean对象上的属性值上,需要使用
@ConfigurationProperties(prefix = "monster")
注解。@ConfigurationProperties(prefix = “前缀”)
4.2 yaml 数组
数组:一组次序排列的值,比如 array,list,queue
行内写法: K: [v1,v2,v3] # 注意:K引号后要有空格
# 或者是
K:
- v1
- v2
- v3
# 减号,后面要有空格
举例:
monster:
age: 5000
is-married: true
birth: 2000/10/10
name: 牛魔王
id: 100
# 对象
# car: {name: 宝马,price: 10000} # 行内格式,不用忽略了空格,里面,和外面的空格
car: # 换行格式
name: 宝马~
price: 30000
# 数组
skill: [芭蕉扇,牛魔拳] # 行内格式
# skill:
# - 芭蕉扇~
# - 牛魔拳~
# hobby: [喝酒,吃肉] # 行内格式
hobby:
- 喝酒~
- 吃肉~
运行测试:
4.3 yaml 对象
对象:键值对的集合:比如:map,hash,set,object 。
行内写法: K: {k1: v1,k2: v2,k3: v3} # 注意:行内的key引号后也要空格一下
或者是:
K:
k1: v1
k2: v2
k3: v3
# 注意空格.
举例
monster:
age: 5000
is-married: true
birth: 2000/10/10
name: 牛魔王
id: 100
# 对象
# car: {name: 宝马,price: 10000} # 行内格式,不用忽略了空格,里面,和外面的空格
car: # 换行格式
name: 宝马~
price: 30000
# 数组
skill: [芭蕉扇,牛魔拳] # 行内格式
# skill:
# - 芭蕉扇~
# - 牛魔拳~
# hobby: [喝酒,吃肉] # 行内格式
hobby:
- 喝酒~
- 吃肉~
#map 属性对象
# wife: {no1: 玉面狐狸,no2: 铁扇公主} # 行内风格,不用忽略了空格,里面,和外面的空格
wife:
no1: 玉面狐狸
no2: 铁扇公主
salaries: [10000,20000]
cars: # 因为 private Map<String,List<Car>> cars;
group1:
- {name: 奔驰,price: 3000}
- name: 保时捷
price: 6000
group2:
- {name: 保时捷,price: 8000}
- name: 宝马
price: 5000
运行测试:
5. yaml 使用细节和注意事项
- 如果
application.properties
和application.yaml
有相同的前缀数值上的绑定的话,则application.properties
优先级高,开发时,应当避免。
- 在 yaml 当中,字符串无需加引号,但如果你用
""
或者是''
包起来,也可以。都不会报错。 - 大家知道,我们在编写 application.yaml 文件时候,没有提示Bean对象的属性字段的信息表,非常不方便。解决这个问题,同时,你已经配置好了的 属性,它是不会提示的,非常的方便。我们只需要添加上如下依赖即可。同时也能解决(),使用 @ConfigurationProperties(prefix = “furn01”) 会提示如下信息 但是不会影响使用
解决方法: 在 pom.xml 增加依赖, 即可
<!-- 解决 @ConfigurationProperties(prefix = "furn01") 提示信息, 在 pom.xml 增加依赖, 即可
Spring Boot Configuration Annotation Processor not configured 提示信息
这里配置 optional 为 ture
说明: 表示防止将此依赖传递到其它模块上,
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- 如果上述方式没有提示的话,可以安装一个名为 yaml的插件来搞定。
6. 总结:
- 熟悉 yaml 的基本语法。
- yaml 的数据类型有三种:字面量,数组,对象。
- 有时候,赋值失败了,看看是不是,对应空格层级的控制不对。没有对上。对正确。
- yaml 语法当中,
:
号后面都用空格,不用漏了。 - 注意:yaml中,要编写中文的话,要将项目的编码设置为
utf-8
,不然,在 yaml 中无法识别到中文,会报错。 - yaml 文件的后缀,可以是
yaml
或者是yml
,两者都是可以的。 - yaml 语法上的缩进不允许使用 tab 键,只允许使用空格 ,因为不同的编译器,对 Tab 键的格式不同。所以,推荐使用空格。
- 缩进的空格数不重要,只要相同层级的元素左对齐即可,也就是相同层级的元素的空格数保持一致即可。
7. 最后:
“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”