二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。

上一章简单介绍了SpringBoot自定义banner,配置端口号和项目路径(二),如果没有看过,请观看上一章

一. 什么是YAML 配置文件

相比于 application.properties 配置文件,SpringBoot 更推荐使用 application.yml 的配置文件方式。

YAML 是 “YAML Ain’t Markup Language” 的递归缩写,是方便人类读写的一种格式,比JSON 格式还方便。

YAML 文件,采用 key–value的形式进行编写, value 可以是单个值,也可以是数组集合,也可以是对象。

properties 配置文件和yaml 配置文件,都是对以前的 *.xml 配置文件进行的简化。

一.一 Yaml 文件的优点

拿 MavenHelloWorld项目里面的配置端口号为 8027,配置项目路径为 /Lin 来看。

XML文件,就需要配置成:

<server><port>8027</port><servlet><context-path>/Lin</context-path></servlet>
</server>

Properties 文件,就需要配置成:

server.port=8027
server.servlet.context-path=/Lin

而 Yaml 文件只需要配置成:

server:port: 8027servlet:context-path: /Lin

当配置文件过多时,如 datasource数据库,redis配置,mongodb配置,shiro配置,mybatis配置等, properties文件也难于理解和阅读了。

而yaml文件,目录结构层次清晰,易于理解和阅读。

下面老蝴蝶开始讲解 Yaml 配置文件。 为了便于观察 Yaml 配置文件的输出结果,
不采用直接写出结果的方式,而采用运行输出结果的方式,

需要创建一个 SpringBoot的 Yaml 项目。

二. 创建 Yaml 项目

根据 第一章的 Maven 创建SpringBoot项目的方式,创建一个名为 Yaml 的项目。里面有pom.xml 依赖,有启动类,有测试类,也有application.properties配置文件,banner.txt 文件,还有更重要的 application.yml 配置文件。

为了便于 Bean 对象的封装,在 pom.xml 里面引入了 lombok的依赖

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>

关于配置文件的格式配置,其实是定义在 Yaml工程的父项目 spring-boot-starter-parent-2.2.2.RELEASE.pom.xml 文件里面。

可以定义成 yml,也可以是 yaml, properties.

当同时存在,造成重突时, properties配置文件的优先级最高, yml 配置文件的的优先级最低。

二.一 验证 properties和 yaml配置文件的优先级

二.一.一 application.properties配置文件

server.port=8027
server.servlet.context-path=/Lin

二.二.二 application.yml 配置文件

server:port: 8081servlet:context-path: /Yue

二.二.三 运行 YamlApplication 启动类,查看控制台输出

发现, application.properties 配置文件生效了。

将 application.properties 文件删除,只保留 application.yml 配置文件。

三. Yaml 配置文件的基本语法

三.一 基本规则

  1. 大小写敏感
  2. 使用缩进表示层级结构
  3. 缩进时,不使用 TAB 键进行缩进,只允许使用空格。
  4. 缩进时,不一定要是四个空格键,或者两个空格键,只需要保证同一层次下的元素左对齐就可以了。
  5. key: value 的值, : 与value 之间,需要有一个空格,进行分隔开来。
  6. 注释时,用 # 进行注释

三.二 放置基本的常量元素

# 放置基本的元素
name: 两个蝴蝶飞
age: 26
sex: 男
single: true
weight: 68.5

三.三 放置对象

# 放置对象
book:name: 陌生人,我送你一首诗author: 岳泽霖nickName: 两个蝴蝶飞

三.四 放置数组

# 放置数组
hobby:- 看书- 写代码- 写诗- 写博客

三.五 单引号,双引号

# 放置特殊的字符串
str:desc1: 我是两个蝴蝶\n飞  # 变成: 我是两个蝴蝶\n飞desc2: "我是两个蝴蝶\n飞" # 会变成: 我是两个蝴蝶#        飞desc3: '我是两个蝴蝶\n飞' # 会变成: 我是两个蝴蝶\n飞

字符串,不用加 单引号,或者双引号。

双引号,不会进行转义,将 \n 变成换行回车

单引号,会进行转义, \n 还是\n.

三.六 合理的嵌套使用

book:name: 陌生人,我送你一首诗author: 岳泽霖nickName: 两个蝴蝶飞# 放置数组hobby:- 看书- 写代码- 写诗- 写博客info:name: 两个蝴蝶飞age: 26sex: 男single: trueweight: 68.5

这样,完全是合法的。

三.七 配置占位符

name2: 老蝴蝶${random.uuid}  # 随机生成 uuid
age2: ${random.int} # 随机生成int范围内的值,-2^31~2^31-1

三.八 配置引用和默认值

info1: ${book.author} # 引入book对象里面的 author属性
info2: ${book.info:张三} # 引用book对象里面的info属性,如果没有,取:后面的默认值,张三

四. 读取application.yml 里面的配置文件

四.一 构建基本的配置文件读取信息

# 放置基本的元素
name: 两个蝴蝶飞
single: false
age: 26
# 放置对象
book:name: 陌生人,我送你一首诗author: 岳泽霖score: 0.00hobby:- 看书- 写代码- 写诗- 写博客
addr: ${book.addr:暂无地址}

四.二 采用 Bean 对象进行接收

在pojo 包下,新创建两个类用于接收数据

四.二.一 SingleInfo 类接收主体对象

@Data
public class SingleInfo {private String name;private Boolean single;private Integer age;private String addr;private Book book;
}

四.二.二 Book 类接收书籍

@Data
public class Book {private String name;private String author;private Double score;private String[] hobby;
}

四.三 采用 Spring的 @Value 进行接收

四.三.一 添加组件注解和@Value注解

@Data
@Component
public class SingleInfo {@Value("${name}")private String name;@Value("${single}")private Boolean single;@Value("${age}")private Integer age;@Value("${addr}")private String addr;//暂时不处理private Book book;
}

四.三.二 测试运行

@SpringBootTest
class YamlApplicationTests {@Autowiredprivate SingleInfo singleInfo;@Testvoid contextLoads() {System.out.println(singleInfo);}
}

测试运行:

能够获取到相应的数据。

但是这种方式,需要对属性一个一个的封装。

book 没有添加相应的注解,故输出为 null

四.四 采用 @ConfigurationProperties 进行封装

四.四.一 在SingleInfo 类上面,添加 @ConfigurationProperties 注解

这个注解,一定要记住。 Configuration+Properties ,组成了 @ConfigurationProperties

Idea 提示让打开文档,那就打开文档,目前发现文档链接已经打不开了。

解决方案,添加 spring-boot-configuration-processor 依赖即可。

四.四.二 添加依赖

在 pom.xml 里面,添加 spring-boot-configuration-processor 依赖

 <!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>

添加依赖之后,重启就好了。

四.四.三 测试运行

发现, book 属性也自动填充了,即使 Book 类没有添加 @Component 组件注解。

四.四.四 为 @ConfigurationProperties 添加前缀prefix

SingleInfo 一定提示:

但是我们这个类,前面没有任何前缀啊。 所以用 Book 类进行演示。

四.四.四.一 Book 类添加组件和@ConfigurationProperties 注解

@Component
@ConfigurationProperties(prefix = "book")

四.四.四.二 测试 Book类的自动填充

Book 正常的填充。

四.五 @PropertySource 注解进行封装

@ConfigurationProperties 并没有添加关于属性文件的配置信息,它怎么知道,要读取的是哪一个配置文件呢? 发现,我们将 yaml配置信息放置在了 application.yml(SpringBoot的全局配置文件), 答案就在这儿。

@ConfigurationProperties 会默认从全局配置文件中获取值

在 resoruces 下面,添加 myapplication.yml 配置文件,里面放置 四.一 里面的内容,并且从 application.yml 里面移除四.一里面的内容

四.五.一 测试验证,看是否读取了

Book 取消相应的注解。

SingleInfo 保持不变。

运行没有报错,但没有读取到相应的信息。

四.五.二 通过 @PropertySource 进行指定配置文件

通过 @PropertySource 注解指定文件路径时,就需要 用 @Value 一个个进行绑定属性,否则会无法绑定相应的属性。

运行程序, 发现运行成功了,但是会中文乱码。

@PropertySource 注解,支持添加 encoding 来指定编码。

@PropertySource(value = "classpath:myapplication.yml",encoding = "UTF-8")

添加encoding 属性后,继续运行程序:

乱码问题解决。

老蝴蝶为什么不演示 Book 绑定,或者在 SingleInfo 对象里面绑定 book呢? @Value属性,不支持这么绑定。

四.六 @ConfigurationProperties 与 @Value 注解比较

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 需要一个个指定属性,分别绑定
松散绑定 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

如果我们只需要获取到配置文件中某一个值的话,可以使用 @Value

如果需要获取到多个值的话,还与 JavaBean 进行绑定,最好使用 @ConfigurationProperties 。

本章节的代码放置在 github 上:

https://github.com/yuejianli/springboot/tree/develop/Yaml

谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

SpringBoot的yml配置文件(三)相关推荐

  1. SpringBoot的yml配置文件

    1.在src\main\resources下创建application.yml配置文件 spring: datasource: driver-class-name: com.mysql.jdbc.Dr ...

  2. SpringBoot中yml配置文件:定义list集合、数组及注意事项

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/you18131371836/article/ details/104839901 1.在平时的yml配置文件中,我们经常使用到 ...

  3. springboot的yml配置文件绑定时必须和相应的类中的属性类型对应,不然启动报错

    今天启动springboot应用时一开始一直是error,访问localhost也无法打开: 此时自己的Person.java: package boot.bean; import lombok.Da ...

  4. springboot yaml/yml配置文件字符串换行

    前言 springboot 2.1.1.RELEASE yaml配置文件字符串换行 需要把RSA公钥放到配置文件中,因字符串太长,为了方便维护,将公钥换行. publicKey: "MIIB ...

  5. SpringBoot - application.yml配置文件中yes/no,on/off在代码中读取的值为true/false

    写在前面 在SpringBoot的项目中,当在配置文件中配置的值为yes/no或者on/off时,在SpringBoot内部解析时会将yes/no,on/off解析为true/false. 参数配置 ...

  6. 解决SpringBoot的yml配置文件报错: org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping

    问题描述 今天在SpringBoot的application.yml中新增了一个配置项: 但是启动的时候报错了,错误如下所示: org.yaml.snakeyaml.parser.ParserExce ...

  7. springboot在yml配置文件中配置类的属性笔记

    首先建立一个简单的实体类,我这里以学生为例,并加上@Component和@ConfigurationProperties(prefix ="student")注解,其中prefix ...

  8. db2 springboot 整合_springboot的yml配置文件通过db2的方式整合mysql的教程

    springboot整合MySQL很简单,多数据源就master,slave就行了,但是在整合DB2就需要另起一行,以下是同一个yml文件 先配置MySQL,代码如下 spring: datasour ...

  9. db2 springboot 整合_springboot的yml配置文件通过db2的方式整合mysql代码示例

    本篇文章小编给大家分享一下springboot的yml配置文件通过db2的方式整合mysql代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. s ...

  10. SpringBoot - 动态修改yml配置文件

    目录 前言 具体实现 实现代码 测试 源码 前言 记录下SpringBoot修改yml配置文件后无需重启服务的方式(打包后生效),效果如下: 具体实现 实现代码 pom.xml <depende ...

最新文章

  1. Java:多线程之线程池
  2. C#6.0语言规范(八) 语句
  3. sublime text3搭建react native
  4. .NET CORE下最快比较两个文件内容是否相同的方法
  5. 荐书 | 10本书给你计算机大师思维
  6. python中 1.34e3_Python快速编程入门——第2章 Python基础语法
  7. 通过社交网络进行OWIN OAuth2身份验证
  8. 使用HTML和CSS格式化DBMail
  9. 数学建模论文写作模板
  10. Louvain社区划分算法及Java语言实现
  11. shell脚本日常机房巡检
  12. aimesh r6400 开_r6900+r6300v2 aimesh 连接成功!点滴分享
  13. u盘误删的文件怎么找回?帮你轻松找回
  14. ...可变形参的使用
  15. 【深度学习实战04】——SSD tensorflow图像和视频的目标检测
  16. 串应用- 计算一个串的最长的真前后缀
  17. 推荐几个学习嵌入式及Linux比较好的网站或博客
  18. vue案例QQ好友列表
  19. php美团团购项目,微信小程序如何实现美团菜单
  20. 基于华为mate10 与iphone x 的拆机手册对比的

热门文章

  1. Spring Boot(八)——Shiro+FreeMarker
  2. 李开复:AI巨头是有史以来最难以打破的垄断 | 谷歌和腾讯参投中国AI企业深圳晶泰科技
  3. 怎么在WPS计算机,电脑怎么把wps热点删了?电脑永久删除wps热点的方法
  4. 应用wps对证件照进行更改颜色,更换只需三步。
  5. Python 三大神器:pip,virtualenv(virtualenvwrapper),fabric
  6. mysql的执行计划_MySQL——执行计划
  7. python数据科学包第三天(股票数据分析、时间事件日志)
  8. 单摄像机对于二维平面的测量
  9. GitHub远程拉取仓库项目提示Please use a personal access token instead.解决方法
  10. k8s节点假死排查记录