当前位置: 首页 > article >正文

Spring Boot项目的配置文件有哪些?加载优先级谁最高?配置优先级谁最高?

目录

一. 结论

二. .prperties、.yml、.yaml 文件类型简介及注意点

2.1 文件简介

2.2. .prperties(默认格式/传统格式)

2.3 application.yml(主流格式)

2.4 application.yaml(主流格式)

2.5 配置文件注意事项

三. bootstrap.properties、bootstrap.yml、bootstrap.yaml 文件

四.  特殊配置文件 application-{profile}.properties、application-{profile}.properties


一. 结论

结论一:spring boot项目中共有三大类配置文件(也可以说是两大类)

第一类:以 properties 结尾的配置文件,例如 bootstrap.properties、bootstrap.properties;

第二类:以 yml 结尾的配置文件,例如 bootstrap.application、application.yml;

第三类:以 yaml 结尾的配置文件,例如 bootstrap.application、application.yaml;

其实,yml文件和yaml文件没有本质区别,它们都是(YAML Ain't Markup Language)格式的一种文件扩展名的缩写,只是有些人习惯写成 .yml 后缀,而有些人习惯写成 .yaml 后缀,而且,在一个项目中,几乎很少会有 yml 文件和 yaml 文件共存,都是使用同一种,所以我们下面就将它们归于一类。

结论二:bootstrap 文件的加载顺序最高且不会被覆盖

结论三:yaml 文件加载顺序 > yml 文件加载顺序 > properties 文件加载顺序

 结论四:"同覆盖,不同加",如果两个或者更多文件配置了同种属性时,属性值会覆盖,加载顺序低的生效;有不同属性时,则会全部生效

例子(1)

一个项目中,配置文件 application.yaml 配置项目端口为8080,application.yml配置端口为8081,application.properties文件配置端口为8082,启动项目后,项目实际运行端口为8082。

文件读取过程就是先读取配置文件 application.yaml ,设置项目端口为8080,

然后读再配置文件 application.yml ,设置项目端口为8081,

最后读取配置文件 application.properties ,设置项目端口为8082,

所以项目实际运行后,运行端口为8082;

例子(2)

再比如,application.yaml 配置 mybatis 框架会略大小写驼峰转换,

application.yml 设置 Redis 地址和端口为127.0.0.1:6389,

application.properties 配置 MySQL 用户名密码为root和123456,

那么最后,这三种配置都会在项目中生效,因为它们不是同属性配置,可以叠加。

二. .prperties、.yml、.yaml 文件类型简介及注意点

2.1 文件简介

Spring Boot 项目最大的优点就是简化了原本 Spring 项目繁重的配置,熟悉Spring Boot项目的小伙伴们应该都听过一句话"约定大于配置",即约定的优先级要高于配置。

在Spring boot项目中,我们做配置只需要使用配置文件即可,配置文件主要有 "application.properties"、"application.yml"、"application.yaml"三种文件

三种文件的优先级为:application.properties > application.yml > application.yaml

通常配置在项目的 resource 文件夹下,正常生效的配置文件,前面会有一个绿色的树叶logo,如果没有,则说明该文件并没有被项目识别为配置文件,里面的配置也是不生效的。

2.2. .prperties(默认格式/传统格式)

properties配置文件格如下所示,格式简单,但是只支持键值对。即 属性值="配置值"

此外可以看出,properties 文件属性配置是无序的,但有一些属性是需要有先后顺序的,在一些需要路径匹配的配置中,顺序就显得尤为重要。开发人员很有可能会不小心出现属性顺序配置错误的失误。

因此,就有了我们现在最为常用的主流模式 yml/yaml文件。

2.3 application.yml(主流格式)

如下图,可以看出,在 yml 文件中,属性的配置层级非常明显,简单清晰,并且消除了properties文件中需要配置属性前缀造成的冗余,简洁美观。

例如:spring 和 mybatis 是同一级别的,所以二者就隔绝开;

而 datasource 则是在 spring 的下一级,直接在 datasource 后面敲回车换行配置子属性;

而 datasource 下还有用户名和密码等子属性,再敲回车换行配置这样就防止了开发人员在配置属性顺序是的失误。可读性强,冗余小,是现在极为主流的配置文件;

2.4 application.yaml(主流格式)

和 yml 文件一样,只不过由于各程序猿或者架构师习惯写成 yaml 后缀,语法和 yml 文件完全一样,用法也一样,一般在项目中很少同时出现 yml 和 yaml ,都是使用其中一种后缀名的文件;

如果同时出现,yaml 的读取优先级要高于 ,项目启动时,会先读取 yaml 配置文件,再读取 yml 配置文件。

2.5 配置文件注意事项

(1)在使用 properties 配置文件时,要注意有些属性配置顺序有先后要求;

(2)在使用 yml/yaml 配置文件时,要注意给属性配置属性值时前要空一个空格,如下图所示,黄色划线区域其实都是有一个空格的,如果没有空格会报错;

(3)有些版本的 spring boot 在识别 properties 或 yml/yaml 配置文件时,不允许里面包含注解,如果有注解或解析失败,小伙伴们要注意一下哦!!!

 

三. bootstrap.properties、bootstrap.yml、bootstrap.yaml 文件

上面这三种文件,可以说是所有配置文件中加载优先级最高的文件了,项目在启动初期会最优先加载此文件,里面通常都是一些项目的通用配置,例如微服务中的服务注册中心和配置中心,公用Redis服务器IP端口,服务器网关各种设置等等。

在 bootstrap 文件中配置过的属性,由于都是项目的通用属性设置,所以在各个微服务子模块中,通常就不会再去做配置,即使做了配置,也不会生效。

总之记住一句话:"bootstrap文件最优先加载,且配置属性不会被后加载的文件属性覆盖,优先级极高"。

四.  特殊配置文件 application-{profile}.properties、application-{profile}.properties

在一些大型项目中,或者我们进行公司接触真正的项目之后,通常会发现一个项目中除了上面的集中文件外,还会出现 application-dev.properties,application-prod.properties,application-dev.yml,application-prod.yml 等文件;

如下图所示

这种文件的读取顺序比是相对来说最低的一层。

简单来说,一个项目,有研发阶段,测试阶段,生产阶段,每个阶段的配置文件肯定多多少偏少都是有一点不同的,比如服务器地址,端口等... 那么我们该如何进行丝滑的切换呢?就是通过在 application.properties 或 application.yml 文件中进行设置,二者均可设置。

在 yml 文件中,如下图所示,设置 spring 子属性 profiles 值 active为 local,那么项目在加载完 application.yml 文件之后,就会再去加载 application-local.yml 文件;

在 application.properties 文件中也是一样的,通过键值对的方式即可,

spring.profiles.active=local,即可在项目读取 application.properties 文件后,再去读取 application-local。properties 配置文件

就是通过这些带有 "-dev"(开发使用的配置文件)、"-prod"(项目发布生产的配置文件)以及其它公司内部的各种环境。


http://www.kler.cn/a/393030.html

相关文章:

  • Vue开发环境搭建上篇:安装NVM和NPM(cpnm、pnpm)
  • K8s 无头服务(Headless Service)
  • Android U 多任务启动分屏——system_server流程(更新中)
  • 今日总结 2024-12-24
  • 第十五章 C++ 数组
  • OpenAI 普及 ChatGPT,开通热线电话,近屿智能深耕AI培训
  • <项目代码>YOLOv8 草莓成熟识别<目标检测>
  • 昇思25天学习打卡营第1天|快速入门
  • DBeaver 连接 OceanBase Oracle 租户
  • Spring框架之观察者模式 (Observer Pattern)
  • 全球经济风雨飘摇,OJK能带领印尼金融创新走多远?
  • 更改Ubuntu22.04锁屏壁纸
  • Unity 性能优化方案
  • docker overlay磁盘空间过高的处理方案
  • 网络技术-网桥模式
  • LVQ 神经网络的 MATLAB 函数详解
  • 大数据面试题--kafka夺命连环问(前15问)
  • Vue3 -- 项目配置之commitlint【企业级项目配置保姆级教程5】
  • D3的竞品有哪些,D3的优势,D3和echarts的对比
  • 服务器集群不做负载均衡可以吗?
  • 鸿蒙进阶篇-属性动画-animateTo转场动画
  • K8S实现反向代理,负载均衡
  • java实际开发中,navicat连接Linux下的mysql服务
  • 数据结构小项目
  • 数据结构---详解栈
  • 「QT」几何数据类 之 QSize 尺寸类