本篇文章用于总结 YML
配置文件的使用,如果错误之处,请批评指正,希望观众老爷们多多支持!
1. 概述
❝
YML 是什么?
❞
-
YML (YAML Aint’t a Martup Language) YAML 不是一种标记语言,通常以 .yml
为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以与支持 YAML 库的编程语言所导入使用,一种专门用来写配置文件的语言。
YAML 试图用一种比 XML 更敏捷的方式,来完成 XML 所完成的任务。例如:
student:
name: yanghi
age: 15
<student>
<name>yanghi</name>
<age>15</age>
</student>
「YML 优点」
-
YML 易于人们阅读 -
更加简洁明了
2. 语法
2.1. 预定
-
key: value
表示键值对关系,「冒号后面必须有一个空格」 -
使用空格的缩进表示层级关系,空格数目不重要,「只要是左对齐的一列数据,都是同一个层级的」 -
大小写敏感 -
缩进时「不允许使用 Tab 键,只允许使用空格」 -
Java 中对于驼峰命名法,可用原名或者 -
代替驼峰,如 Java 中的lastName
属性,在 yml 中使用lastName
或者last-name
都可正确映射
2.2. 键值关系
「1. 普通值(字面量)」
key: value
字面量直接写
字符串默认不用加上单引号或者双引号:
-
字符串使用双引号 " "
包裹时,转义字符能够被解析 -
字符串使用单引号 ' '
包裹时,转义字符不能够被解析,如name: hi n yml
,n
被识别为字符串
「2. 日期」
日期值用 /
进行分隔
date: 2019/01/01
「3. 对象(属性和值)、Map(键值对)」
Map 和 对象的写法一样,因为 Map 中存储的对象是键值对的形式
多行写法:key:value
student:
name: yanghi
age: 15
单行写法:对象字面量 {key1: value1, key2: value2}
student: {name: yanghi, age: 15}
「4. 数组、list、set」
数组、list、set,存储的数据都是一个个值,所以它们的写法是相同的
多行写法:用 -
值连接数组中的一个元素
pets:
- dog
- pig
- cat
单行写法:数组的形式 [item1, item2, ...]
pets: [dog, pig, cat]
「5. 对象、集合、普通值的嵌套」
比如说一个数组中的值是一个对象,这个对象中的某个属性的属性值是一个集合
students:
- {name: yanghi, age: 18, hobby: [eat, music]}
- {name: zhangsan, age: 18, hobby: [eat, music]}
- {name: lisi, age: 18, hobby: [eat, music]}
我们只需要掌握对象、集合、普通值的写法,进行嵌套就可以掌握了。
2.3. 占位符赋值
占位符相当于一个提前定义的变量
应用场景:就是在进行 yml
配置时,有些变量的值是重复的,那么我们就可以使用占位符来代替,当修改占位符的值,其他所有的都会改变。
myPort: 8080
# SpringBoot 配置服务器的端口
server:
port: ${myPort: 8888}
${myPort: 8888}
表示引用提供定义好的 myPort
,8888
表示设置的变量,没有赋值的时候的默认值。也可以不写默认值,相当于 ${myPort: }
3. SpringBoot 读取 YML
3.1. @Value 注解
@Value
注解只能读取简单类型的值(8种基本数据类型及其包装类,String、Date)
首先我们在 SpringBoot
项目根目录的 resources
文件夹下,创建 application.yml
这就是我们项目的配置文件。
在该文件中写入以下配置:
student:
name: yanghi
读取方式:在类的成员属性上加上 @Value("")
注解,""
内填入值的路径:student.name
,就会读取的配置文件中的值,注入到对应的成员属性上了。
@RestController
public class TestController {
@Value('${student.name}')
private String name;
@RequestMapping("/test")
public String test(){
return name;
}
}
「注意」:使用了 @Value
注解的类,必须交由 Spring 容器进行管理,否则该注解会失效。
3.2. @ConfigurationProperties注解
通常我们读取 yml 配置文件的常用方式是 @ConfigurationProperties
注解,因为@Value
注解只能单个的读取配置文件中的值,而@ConfigurationProperties
注解可以直接读取我们的配置文件,并且可以直接把 YML 配置文件中的 key: value
键值对,映射到类中的成员属性中去。
「使用」
在application.yml
中书写以下配置
student:
name: yanghi
age: 15
hobby: [eat, music]
在项目根目录下,创建 Student
实体类,用于对应 yml 配置中的 student 对象。并在类上添加 @Component
、@ConfigurationProperties(perfix = "prefix")
注解。
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(perfix = "student")
public class Student {
private String name;
private Integer age;
private List<String> hobby;
}
类上标注的注解解释:
-
@Data
Lombok
注解 自动为类成员属性添加getter setter
方法 -
@AllArgsConstructor
Lombok
注解 为类添加有参构造方法 -
@NoArgsConstructor
Lombok
注解 为类添加无参构造方法 使用了@AllArgsConstructor
注解,一定要添加@NoArgsConstructor
注解 -
@Component
泛指各种组件,该注解表示的类,会交给Spring
容器进行管理 -
@ConfigurationProperties(prefix = "" )
获取配置文件值,注入到类成员属性中,prefix
前缀,用于导入特定前缀下的属性。
「从 Spring 容器中获取 Student 对象」
@RestController
public class TestController {
@AutoWired
private Student student;
@RequestMapping("/test")
public String test(){
return student;
}
}
4. YML 和 properties 相互转换
SpringBoot 项目支持 YML
和 properties
两种配置文件格式
在实际项目开发中,有的同学喜欢用 YML
格式,有的同学喜欢用 properties
格式。
那么我们可以使用 YML
和 properties
格式转换工具,进行格式之间的相互转换: https://toyaml.com/index.html
5. 配置 YML 书写提示
在书写 YML 配置时,我们希望敲一些关键字,可以显示出完整的提示,如输入 port
,提示 server.port
。
我们只需要在 Maven
配置文件 pom.xml
中,添加注解处理器依赖即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
然后重新编译项目,就可以显示提示了。

原文始发于微信公众号(yanghi):SpringBoot 项目中 YML 配置文件的使用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/226812.html