博客主页:准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. Python-初见

    目录 概述 关键字 标准数据类型 Number String List Tuple Set Dictionary 删除对象 数据类型转换 推导式 运算符 迭代器与生成器 迭代器 生成器 函数 参数传递 ...

  2. Py点亮

  3. Metalama简介3.自定义.NET项目中的代码分析

    本系列其它文章 使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题 Metalama简介1. 不止是一个.NET跨平台的编译时AOP框架 Metalama简介2.利用Aspect在 ...

  4. python基础练习题(题目 阶乘求和)

    day17 --------------------------------------------------------------- 实例025: 阶乘求和 题目 求1+2!+3!+-+20!的 ...

  5. JuiceFS 缓存预热详解

    缓存预热是一个比较常见的概念,相信很多小伙伴都有所了解.对于 JuiceFS 来说,缓存预热就是将需要操作的数据预先从对象存储拉取到本地,从而获得与使用本地存储类似的性能表现. 缓存预热 JuiceF ...

  6. Go通过cobra快速构建命令行应用

    来自jetbrains Go 语言现状调查报告 显示:在go开发者中使用go开发实用小程序的比例为31%仅次于web,go得益于跨平台.无依赖的特性,用来编写命令行或系统管理这类小程序非常不错. 本文 ...

  7. JVM组成、GC回收机制、算法、JVM常见启动参数、JAVA出现OOM,如何解决、tomcat优化方法

    JVM组成.GC回收机制.算法.JVM常见启动参数.JAVA出现OOM,如何解决.tomcat优化方法

  8. BUUCTF-MISC:二维码

    题目 解题过程 1.点击下载附件,发现是一个压缩包,解压后得到一张二维码 2.使用QR research扫描,得到的内容并不是flag 3.使用010editor打开图片分析,发现图片里面含有一个tx ...

  9. python+pytest接口自动化(15)-日志管理模块loguru简介

    python自带日志管理模块logging,使用时可进行模块化配置,详细可参考博文Python日志采集(详细). 但logging配置起来比较繁琐,且在多进行多线程等场景下使用时,如果不经过特殊处理, ...

  10. 1.ArrayList和LinkedList区别

    说⼀下ArrayList和LinkedList区别 具体区别 1.1. ⾸先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的 1.2. 由于底 ...