SpringBoot 项目中 YML 配置文件的使用

本篇文章用于总结 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 优点」

  1. YML 易于人们阅读
  2. 更加简洁明了

2. 语法

2.1. 预定

  • key: value 表示键值对关系,「冒号后面必须有一个空格」
  • 使用空格的缩进表示层级关系,空格数目不重要,「只要是左对齐的一列数据,都是同一个层级的」
  • 大小写敏感
  • 缩进时「不允许使用 Tab 键,只允许使用空格」
  • Java 中对于驼峰命名法,可用原名或者 - 代替驼峰,如 Java 中的 lastName属性,在 yml 中使用 lastName或者 last-name都可正确映射

2.2. 键值关系

「1. 普通值(字面量)」

key: value字面量直接写

字符串默认不用加上单引号或者双引号:

  • 字符串使用双引号 " "包裹时,转义字符能够被解析
  • 字符串使用单引号 ' '包裹时,转义字符不能够被解析,如 name: hi n ymln被识别为字符串

「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}表示引用提供定义好的 myPort8888表示设置的变量,没有赋值的时候的默认值。也可以不写默认值,相当于 ${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 项目支持 YMLproperties 两种配置文件格式

在实际项目开发中,有的同学喜欢用 YML格式,有的同学喜欢用 properties格式。

那么我们可以使用 YMLproperties格式转换工具,进行格式之间的相互转换: 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>

然后重新编译项目,就可以显示提示了。

SpringBoot 项目中 YML 配置文件的使用

原文始发于微信公众号(yanghi):SpringBoot 项目中 YML 配置文件的使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/226812.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!