详细学习可以进入:
统一的系列的环境及版本:
环境 | win11 |
工具 | idea 2017 |
jdk | 1.8 |
数据库 | mysql5.5 |
maven | 3.2.1 |
项目导入方式 | maven 导入 |
数据库前端工具 | mysql-front (navicat 也可以) |
本文内容
本文来讲述一下,application.yml 或application.yaml 文件,可以放在哪里,并且如果有两个地方都有文件,那么谁的优先权更大
SpringBoot - 配置文件application.yml
1,基本介绍
(1)YAML 是 JSON 的超集,简洁而强大,是一种专门用来书写配置文件的语言,可以替代 application.properties。
(2)在创建一个 SpringBoot 项目时,引入的 spring-boot-starter-web 依赖间接地引入了 snakeyaml 依赖, snakeyaml 会实现对 YAML 配置的解析。
(3)YAML 的使用非常简单,利用缩进来表示层级关系,并且大小写敏感。
2,YAML 配置与 Properties 配置的比较
- 可以使用 @PropertySource 注解加载自定义的 Properties 配置文件,但无法加载自定义的 YAML 文件。
- YAML 支持列表的配置,而 Properties 不支持。
3 , 常规配置
(1)在 Spring Boot 项目中使用 YAML 只需要在 resources 目录下创建一个 application .yml 文件即可,这里我们添加如下配置:
有了 application .yml 后我们可以将 resources 目录下的 application.properties 文件删除(当然保留也没问题),完全使用 YAML 完成文件的配置。
注意:application.properties 的优先级会比 application.yml 高,也就是说如果两个文件都存在,且两个文件都配置了同一个属性,那么会以 application.properties 里的配置为准。
server:
port: 8081
servlet:
context-path: /hangge
tomcat:
uri-encoding: utf-8
- 其等效于 application.properties 中的如下配置:
server.port=8081
server.servlet.context-path=/hangge
server.tomcat.uri-encoding=utf-8
当内容比较少的时候,可能properties 文件更容易一些。而且他没有缩进的语法,容错性要好,适合初学者。
在后面的章节当中也有,很多的yml 或 properties 文件。
SpringBoot的配置文件有.properties和.yml两种形式,两种配置文件的效果类似,只不过是格式不同而已
1、当properties和yml同时存在时,properties的优先级会比yml高
2、两种文件都是用#注释
3、yml的优点在于可以省去一下重复代码
4、在properties文件里面的 “ .” 连接在yml文件里面全部换成 ":" 进行连接,并且每一级之间必须换行,在第二级开始应该进行一个Tab键的缩进,如果是同级的就不需要进行缩进
5、在yml文件里面如果是需要进行赋值那么必须是要在 ":" 后面进行一个空格键的缩进
6、在yml文件里面所有的配置,相同级别只能出现一次,比如我们使用了spring这个级别,那么我们在后边进行spring级别的配置的时候就必须在这个地方进行,不能在写一个spring级别
图3: yml 格式
yml 优美!!但是自带语法。毕竟这是一种超JSON。目前还没有啥工具能给你错误指导。 适合熟练程序员。
properties 简单。成熟。有N多的工具可以检查,写错了,工具有提示,这一点就太适合初学者了
YAML 简介
YAML 全称 YAML Ain't Markup Language,它是一种以数据为中心的标记语言,比 XML 和 JSON 更适合作为配置文件。YAML文件格式是Spring Boot支持的一种JSON超集文件格式。相较于传统的Properties配置文件,YAML文件以数据为核心,是一种更为直观且容易被电脑识别的数据序列化格式。application.yaml文件的工作原理和application.properties一样。
想要使用 YAML 作为属性配置文件(以 .yml 或 .yaml 结尾),需要将 SnakeYAML 库添加到 classpath 下,Spring Boot 中的 spring-boot-starter-web 或 spring-boot-starter 都对 SnakeYAML 库做了集成, 只要项目中引用了这两个 Starter 中的任何一个,Spring Boot 会自动添加 SnakeYAML 库到 classpath 下。
YAML 的语法如下:
- 使用缩进表示层级关系。
- 缩进时不允许使用 Tab 键,只允许使用空格。
- 缩进的空格数不重要,但同级元素必须左侧对齐。
- 大小写敏感。
- 字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义
YAML 对象、数组、List、Map、Set的行内写法与缩进写法
在 YAML 中,对象可能包含多个属性,每一个属性都是一对键值对。
YAML 为对象提供了 2 种写法:缩进式写法、行内式写法,但注意,无论是缩进写法还是行内写法,冒号后都必须有一个空格。
下面的写法其实也是一种正确的写法。就是完全是类的写法。只是不太常见罢了
# user对象 行内写法:注意冒号后空格
user: {
username: xiatian is good,
age: 32,
birth: 2020/09/10 13:14:15,
# book对象 行内写法:注意冒号后空格
book: {bookName: springboot , bookPrice:102},
# 数组 行内写法:注意冒号后空格
hobby: [篮球,足球,排球],
# List 行内写法:注意冒号后空格
booksname: [计算机基础,javaEE框架,springboot],
# Map 行内写法:注意冒号后空格
books: {key1: spring, key2: springmvc, key3: springboot,key4: springcloud,
chinese: {0: 活着, 1: 孙子兵法, 2: 诗经, hz: 活着, szbf: 孙子兵法, sj: 诗经}},
# Set 行内写法:注意冒号后空格
salary: [6000,7000,8000]
}
# user对象 缩进写法:注意冒号后空格,这是缩进的写法。格式还是看“图3: yml 格式”吧。
user:
username: 'xiatian is good'
age: 32
birth: 2020/09/10 13:14:15
book:
bookName: springboot
bookPrice: 102
hobby:
- 篮球
- 足球
- 排球
booksname:
- 计算机基础
- javaEE框架
- springboot
books:
key1: spring
key2: springmvc
key3: springboot
key4: springcloud
chinese:
0: 活着
1: 孙子兵法
2: 诗经
hz: 活着
szbf: 孙子兵法
sj: 诗经
salary:
- 6000
- 7000
- 8000
YAML 位置
第一个位置
第一个配置文件位于 SRC平级目录:如下图所示
port: 8083 监听端口
第二个位置
第二个配置文件位于config 目录下
监听端口为:8084
运行 此项目。
如果编译有错,刷新maven 文件。
所下图绿框所示。
启动,看日志
可以得知,config 下的配置文件起作用。
当删除了config 目录下的配置文件之后。
其它位置
以此类推得到。
这样,我们在调试SpringBoot项目时就可以知道了配置文件的顺序