springboot 的配置文件加载顺序

简介: springboot 的配置文件加载顺序

详细学习可以进入:

SpringBoot知识范围-学习步骤【思维导图】

统一的系列的环境及版本:

环境 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项目时就可以知道了配置文件的顺序

相关文章
|
2月前
|
Java 调度 Spring
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
322 0
|
2月前
|
Java 容器 Spring
SpringBoot:详解依赖注入和使用配置文件
SpringBoot:详解依赖注入和使用配置文件
|
10天前
|
机器学习/深度学习 JSON Java
SpringBoot是如何加载配置文件的?
SpringBoot是如何加载配置文件的?
|
3天前
|
Java
SpringBoot之内部配置加载顺序和外部配置加载顺序
SpringBoot之内部配置加载顺序和外部配置加载顺序
|
3天前
|
Java
SpringBoot配置-配置文件分类,server.port修改端口,自定义修改配置内容
SpringBoot配置-配置文件分类,server.port修改端口,自定义修改配置内容
|
10天前
|
JavaScript Java 数据库连接
【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理
【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理
16 0
|
2月前
|
Java 容器 Spring
【SpringBoot:详解依赖注入和使用配置文件】
【SpringBoot:详解依赖注入和使用配置文件】
20 2
|
2月前
|
Java Shell 测试技术
SpringBoot指定多套配置文件环境
SpringBoot指定多套配置文件环境
30 1
QGS
|
2月前
|
JSON Java 关系型数据库
手拉手Springboot获取yml配置文件信息
手拉手Springboot获取yml配置文件信息
QGS
52 1
|
2月前
|
Java
SpringBoot内部配置加载顺序
SpringBoot内部配置加载顺序
39 0