本篇文章用于总结 YML 配置文件的使用,如果错误之处,请批评指正,希望观众老爷们多多支持!

1. 概述

YML 是什么?

  • YML (YAML Aint’t a Martup Language) YAML 不是一种标记语言,通常以 .yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以与支持 YAML 库的编程语言所导入使用,一种专门用来写配置文件的语言。

YAML 试图用一种比 XML 更敏捷的方式,来完成 XML 所完成的任务。例如:

student:name: yanghiage: 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 yml\n被识别为字符串

2. 日期

日期值用 /进行分隔

date: 2019/01/01

3. 对象(属性和值)、Map(键值对)

Map 和 对象的写法一样,因为 Map 中存储的对象是键值对的形式

多行写法:key:value

student:name: yanghiage: 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: yanghiage: 15hobby: [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 {@AutoWiredprivate 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 配置文件的使用相关推荐

  1. IDEA springboot项目中properties配置文件 {针对将对应GBK改为UTF-8并勾选转为ASCII后仍无效情况} 运行时中文乱码解决

    springboot项目中properties配置文件中,运行时中文乱码情况 file encoding里边进行设置,设为utf-8并勾选转为ascii,分别在setting.setting for ...

  2. SpringBoot项目中ShiroConfig 配置文件无法注入bean和使用@Value注解的问题

    在开发项目过程中,shiro配置类使用@Autowired无法将bean注入到spring容器中,并且使用@Value无法从配置文件中获取值的问题.查询得知需要将下面这个类改为static才正常,具体 ...

  3. 【SpringBoot零基础案例05】【IEDA 2021.1】若SpringBoot项目两种配置文件同时存在,哪种文件配置起作用?

    新建模块,并创建IndexController类 package com.zx.springboot.web;import org.springframework.stereotype.Control ...

  4. SpringBoot项目中遇到的BUG

    1.启动项目的时候报错 1.Error starting ApplicationContext. To display the auto-configuration report re-run you ...

  5. 基于springboot项目中使用docker-compose+es+kibana+logstash+mysql 提高数据查询效率

    基于springboot项目中使用docker-compose+es+kibana+logstash+mysql 提高数据查询效率 1.拉取logstash,kibana,es,mysql镜像 #命令 ...

  6. SpringBoot项目中集成第三方登录功能

    SpringBoot项目中集成第三方登录功能 引言 1 环境准备 2 代码实现 3 第三方平台认证申请 4 打包和部署项目 5 第三方平台登录认证测试 6 参考文章 引言 最近想把自己在公众号上介绍过 ...

  7. SpringBoot 项目中集成 Prometheus 和 Grafana

    项目上线后,除了能保障正常运行以外,也需要服务运行的各个指标进行监控,例如 服务器CPU.内存使用占比,Full GC 执行时间等,针对一些指标出现异常,可以加入一些报警机制能及时反馈给开发运维.这样 ...

  8. springboot引入外部yml配置文件

    本文记录下springboot引入外部yml配置文件 文章目录 概述 本文小结 概述 如果不想把所有的配置都写在application.yml文件中,把它拆分成多个yml文件,并在applicatio ...

  9. Springboot项目中使用Kafka

    Springboot项目中使用Kafka 第一步:安装好Kafka服务器 具体可参考: https://blog.csdn.net/weixin_40990818/article/details/10 ...

最新文章

  1. Python培训教程分享:“高效实用” 的Python工具库
  2. Python进阶最新中文版,开源!
  3. Red Hat Enterprise Linux 5---system-config-*管理工具
  4. lnmp 切换mysql 版本_LNMP1.5:php多版本切换
  5. Solr 5.4.0
  6. 【hadoop】hive 安装实践
  7. eclipse整体替换
  8. 获取泛型T的ClassT clazz
  9. 苹果将于 2025 年推出的 Apple Car 长什么样?
  10. 两年半php,两年半,我收获了什么?
  11. TP框架使用ajax的post请求方式下载文件
  12. wow修改人物模型_人物修改教程更仔细
  13. cocos2dx图片加密解密(npk方式)
  14. 串级调节系统参数整定方法(串级调节器参数整定)
  15. HTML表格中输数字进行计算,excel表格如何自动计算输入数字
  16. linux 查看硬盘序列号、设备序列号、系统安装时间
  17. 华为发布八核处理器Kirin 920
  18. 2022鹏业安装算量软件10大常见问题整理
  19. 企业专线传输网络与普通宽带的对比
  20. 免费网络电话App 传统通信破冰者

热门文章

  1. 微信群裂变操作流程方案
  2. secureCRT Ctrl + C
  3. 自定义 View(一)仿 QQ 列表 Item 侧拉删除功能
  4. 【爬虫学习笔记day11】1.9. 参考阅读:urllib:Handler处理器和自定义Opener+ProxyHandler处理器(代理设置)+cookiejar库 和 HTTPCookieProc
  5. chm“已取消到该网页的导航 ”或者“无法显示网页”的解决
  6. latex中显示引用文献缺失
  7. DEP栈保护ASLR 开启关闭
  8. 分层架构图怎么做,先收藏了
  9. 一行代码告诉你为什么python代码中要加#coding:utf-8注释
  10. 微信备份通讯录 服务器,微信备份通讯录在哪,教您微信备份通讯录在哪