博客主页:准Java全栈开发工程师

00年出生,即将进入职场闯荡,目标赚钱,可能会有人觉得我格局小、觉得俗,但不得不承认这个世界已经不再是以一条线来分割的平面,而是围绕财富旋转的球面,成为有钱人不是为了去掌控球体的转向,而是当有人恶意掌控时,努力保护好家人和自己。

一、YAML 简介

1、什么是 YAML ?

  • YAML(YAML Ain't Markup Language),一种数据序列化格式。
  • 这种格式的配置文件近些年逐渐进入市场,并开始占据主导地位。

2、优点

  • 较 xml 类型和 properties 类型相比,更容易阅读,结构也更加的清晰。
  • 容易与脚本语言交互。
  • 以数据为核心,重数据轻格式,轻格式并不是说可以不遵守格式,只是格式更加随性一些。

3、扩展名

  • 扩展名有两种,无论是那个扩展名,都是 YAML 格式的配置文件,拥有 YAML 的属性。

    • .yml ,这种扩展名更加主流一些
    • .yaml

4、语法规则

  • 对大小写非常敏感,如:定义 age 和 AGE 都会认为是两个属性。
  • 属性层级关系使用多行描述,每行结尾使用冒号结束。
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格。
  • 空格个数并不重要,只要保证同层级的左侧对齐即可。
  • 属性值前面添加空格。
  • 号表示注释。

5、格式

server:
port: 80
  • 切记:属性值前面必须有一个空格。
  • port 是 server 下的一个属性,根据属性层级之间使用多行描述,以及使用缩进表示的规则,port 的书写位置如上所示,但一般情况下,这种格式我们无需过多纠结,我们回车换行后自动提供的格式一般都是正确的。

6、数组数据

name: 准Java全栈开发工程师
server:
port: 80
# 数组格式
likes:
- game
- movie
- music
  • 数组数据的属性值换行书写,以 “-” 减号开头,注意属性值前空格,如上述 likes 所示。

二、三种配置文件

以配置端口号为例,介绍三种配置文件及其格式。

1、properties 类型

  • 在未接触到 yaml 之前,我们的配置文件大多数都是以 properties 结尾的文件。
server.port=80
  • 格式为:属性名=属性值 。
  • 这种方式还是非常常见的,我们之前在配置连接数据库相关信息的 jdbc.properties 文件也是使用的该方式。

2、yml 类型

server:
port: 81
  • 将端口号设置为 81 。

3、yaml 类型

  • yml 和 yaml 只是扩展名不同而已,其实是一种类型的配置文件。
server:
port: 82

4、优先级

  • 当项目中同时存在上述三个配置文件时,用采用那个配置文件呢?我们可以通过观察端口号来获得优先级顺序。

  • 端口号为 80 ,说明优先采用了 properties 类型的配置文件,它的优先级最高。
  • 将 properties 配置文件中的配置内容删除,观察 .yaml 和 .yml 那种文件优先级更高。

  • 端口号又变为了 81 ,说明 .yml 文件优先级更高一些,虽然 .yaml 只是不同的扩展名罢了。
  • 总结:优先级由高到低 properties > yml > yaml

三、YAML 代码提示功能

  • 有很多小伙伴反应,说在写 YAML 文件时,代码不提示。

  • 没有代码提示功能,对我们开发还是造成了一定的影响的,下面就带着大家来解决这个问题。
  • 首先进入到模块管理。

  • 将 YAML 类型的两个配置文件添加。

  • 选中创建的两个配置文件,完成后点击 “OK” 即可。

  • 此时的配置文件已经变成了三个。

  • 重新回到配置文件看是否实现了代码提示功能。

  • 已经实现了代码提示功能,虽然是 YAML 文件,但是代码提示的还是按照 properties 类型进行的,并不影响,找到需要的属性直接回车后还是会呈现出 YAML 格式。

四、读取 YAML 配置文件中的数据

1、数据准备

sourceName: SpringBoot

server:
port: 80 user:
name: 准Java全栈开发工程师
age: 22
likes:
- music
- game
- movie

2、方式一:@Value

@SpringBootTest
class DemoApplicationTests { @Value("${sourceName}")
private String sourceName;
@Value("${server.port}")
private Integer port;
@Value("${user.likes[0]}")
private String likes; @Test
void contextLoads() {
System.out.println(sourceName);
System.out.println(port);
System.out.println(likes);
}
}
  • 将要读取的数据定义为属性,使用 @Value 注解读取配置文件中的数据并注入给属性,之后在方法体中可以直接使用。

3、方式二:Environment

@SpringBootTest
class DemoApplicationTests {
@Autowired
private Environment environment; @Test
void contextLoads() {
System.out.println(environment.getProperty("sourceName"));
System.out.println(environment.getProperty("server.port"));
System.out.println(environment.getProperty("user.likes[0]"));
}
}
  • SpringBoot 提供有 Environment 对象,可以将配置文件中的所有数据都封装到该对象中,使用 getProperty 方法,将想要读取的数据名作为参数传入即可。

4、方式三:自定义对象

user:
name: 准Java全栈开发工程师
age: 22
likes:
- music
- game
- movie
  • 对于配置类中的 user 数据,其下还有很多子层,如果我们想一下子将 user 的所有数据都取出,应该怎么做呢?将其封装为一个对象。
@Component  // 将bean的创建工作交由Spring管理
// @ConfigurationProperties 注解表示加载配置文件
// 使用prefix前缀表示只加载指定前缀的数据
@ConfigurationProperties(prefix = "user")
public class User {
private String name;
private Integer age;
private Object[] likes;
// get、set、toString和构造器方法省略
}
  • 和我们定义实体类没有太大的区别,只是这次不再是和数据库表中的字段对应,而是和配置文件中定义的数据对应。
  • 除此之外,还需要使用 ConfigurationProperties 注解加载配置文件,使用 prefix 指定加载数据的前缀。
@SpringBootTest
class DemoApplicationTests {
@Autowired
private User user; @Test
void contextLoads() {
System.out.println(user);
}
}
  • 使用该方式在定义实体类时,会报红提示

  • 我们只需要在 pom.xml 文件中导入相应的依赖即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

以上就是文章的全部内容啦,诸佬如果有任何建议都可以提哦。

创作不易,如果觉得对您有帮助的话,欢迎关注点赞收藏哦。

【SpringBoot】YAML 配置文件的更多相关文章

  1. SpringBoot 之 配置文件、yaml语法、配置注入、松散绑定

    配置文件 SpringBoot 有两种配置文件格式,二选一即可,官方推荐 yaml: application.properties key=value的格式 application.yaml key: ...

  2. Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件

    由于公司最近在做技术转型(从.Net转Java),因此自己也开启了学习Java之路.学习Java怎么能不学习这几年这么火的Spring Boot框架,由于自己有总结的习惯,因此会把学习的过程以博客的形 ...

  3. [SpringBoot] - 了解什么是SpringBoot,使用SpringBoot的配置文件

    首先明白Spring是什么,Spring是Java开发的一个框架,为了方便简化Java开发. 什么是注解(注解式开发)? Spring的常用注解有哪些? 假如用SpringBoot构建一个网站程序,应 ...

  4. springboot的配置文件

    一.springboot配置文件值的注入 @ConfigurationProperties(prefix = "xxx") 实例代码: @Component @Configurat ...

  5. SpringBoot读取配置文件源码探究

    1. SpringBoot读取配置文件源码探究 1.1. 概览 springboot的源码是再原来的Spring源码上又包了一层,看过spring源码都知道,当我们从入口debug进去的时候,原来的S ...

  6. SpringBoot:配置文件及自动配置原理

    西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! SpringBoot ...

  7. Spring Boot2 系列教程 (五) | yaml 配置文件详解

    自定义属性加载 首先构建 SpringBoot 项目,不会的看这篇旧文 使用 IDEA 构建 Spring Boot 工程. 首先在项目根目录 src >> resource >&g ...

  8. 【springboot读取配置文件】@ConfigurationProperties、@PropertySource和@Value

    概念: @ConfigurationProperties : 是springboot的注解,用于把主配置文件中配置属性设置到对于的Bean属性上 @PropertySource :是spring的注解 ...

  9. SpringBoot基础学习(二) SpringBoot全局配置文件及配置文件属性值注入

    全局配置文件 全局配置文件能够对一些默认配置值进行修改.SpringBoot 使用一个名为 application.properties 或者 application.yaml的文件作为全局配置文件, ...

随机推荐

  1. 不用关闭重启cad及不用更改快捷方式或者版本号c#调试cad插件

    c#开发的cad插件需要重启cad才能进行调试,然而高版本的cad启动比较慢特别是一些古董电脑,而且cad有重启次数限制.针对不用重启cad调试已经有成熟的方案了,但是需要调试一次修改一次快捷方式或者 ...

  2. 面试官:说一说Zookeeper中Leader选举机制

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 今天又是一个阳光明媚的一天,我又 ...

  3. Python操作数据库类 Oracle、Sqlserver、PostgreSQL

    我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...

  4. Array实现

    (一)基本类型数组实现 public class Array { private int[] data; private int size; // 构造函数,传入数组的容量capacity构造Arra ...

  5. JS/JQ动态创建(添加)optgroup和option属性

    JavaScript和Jquery动态操作select下拉框 相信在前端设计中必然不会少的了表单,因为经常会使用到下拉框选项,又或是把数据动态回显到下拉框中.因为之前牵扯到optgroup标签时遇到了 ...

  6. Hyperledger Fabric无系统通道启动及通道的创建和删除

    前言 在Hyperledger Fabric组织的动态添加和删除中,我们已经完成了在运行着的网络中动态添加和删除组织,但目前为止,我们启动 orderer 节点的方式都是通过系统通道的方式,这样自带系 ...

  7. Java学习day8

    今天学习了package,import,final,static和多态 package可以理解为文件夹,因为有些类可能重名,如果在同一个目录下就无法正常实现,所有需要有不同的包来装对应的类 Java出 ...

  8. 【直播回顾】OpenHarmony知识赋能第四期第二课——GPIO驱动开发

    3月17日晚上19点,​知识赋能第四期直播的第二节课<OpenHarmony标准系统HDF框架之GPIO驱动开发>​,在OpenHarmony开发者成长计划社群内成功举办. 本期课程,由​ ...

  9. Linux 服务器的性能参数指标总结

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 前言 一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运 ...

  10. ZooKeeper 到底解决了什么问题?

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 目标 ZooKeeper 很流行,有个基本的疑问: Zo ...