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.xdnf.cn/news/14270.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

蓝牙眼镜WT6900HA语音控制芯片方案:开启智能穿戴新篇章

前言: 随着科技的飞速发展,智能穿戴设备已经逐渐融入我们的日常生活。从智能手表到智能手环,再到如今的智能蓝牙眼镜,这些设备不仅改变了我们的生活方式,更引领了一场科技革命。 今天,我们要为大家介绍一款…

项目管理【02】项目开发完整指南

移动端项目开发完整指南:从需求到上线 在移动应用开发过程中,一个项目从最初的需求到最终上线,需要经过多个关键阶段。本文将详细介绍整个开发流程中的最佳实践,帮助开发团队更高效地完成项目。 一、准备阶段 项目启动前的准备工…

快手直播间采集教程,快手引流,快手截流,截流工具,直播间截流,快手直播间采集,获客系统,获客软件

功能: 1.输入快手直播间链接可一键监控直播间 2.可采集新进直播间的人 3.可采集直播间所有动作,包含:发弹幕的人和内容、送礼物的人和送的礼物、点亮爱心的人 4.可一键导出新进直播间的快手ID 5.可一键导出直播间动作列表,也可以筛…

sol机器人pump机器人如何实现盈利的?什么是Pump 扫链机器人?

什么是Pump 扫链机器人,它的盈利逻辑优化策略是什么? Pump 扫链机器人,通过智能化、自动化的买卖操作帮助投资者实现快速盈利。在此基础上,我们对该机器人的盈利逻辑进行了深度优化,涵盖了买入策略和止盈策略的各个方面…

【vue2】13.自定义指令

目录 自定义指令 自定义指令的作用? 自定义指令的使用步骤? 1. 注册 (全局注册 或 局部注册) 2. 标签上 v-指令名 使用 自定义指令 - 指令的值 1. 通过指令的值相关语法,可以应对更复杂指令封装场景 2. 指令值的语法: 自定义指令 - v-loading…

【LLM】Agent的相关Benchmark

note 文章目录 note一、SuperCLUE-Agent二、AgentBench三、跨系统benchmark:CRAB四、SWE-bench 一、SuperCLUE-Agent SuperCLUE-Agent是一个 Agent智能体中文原生任务能力测评基准,评估方面包括: 工具使用能力(调用API、检索API、…

MATLAB用CNN-LSTM神经网络的语音情感分类深度学习研究

全文链接:https://tecdat.cn/?p38258 原文出处:拓端数据部落公众号 在语音处理领域,对语音情感的分类是一个重要的研究方向。本文将介绍如何通过结合二维卷积神经网络(2 - D CNN)和长短期记忆网络(LSTM&…

机器学习基础03

目录 1.KNN算法-分类 1.1样本距离判断 1.1.1欧式距离 1.1.2曼哈顿距离 1.2KNN 算法原理 1.3KNN缺点 1.4API 2.模型选择与调优 2.1保留交叉验证 2.2K-折交叉验证 2.3分层k-折交叉验证Stratified k-fold 2.4其它验证 2.5API 3.模型保存与加载 3.1保存模型 3.2加…

【go从零单排】go语言中testing的几种类型

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 Go 语言中的 testing 包是用于编写和运行测试的标准库。它提供了丰富的功能&…

[笔记]自动化中破解验证码

01需求分析 1.打开一个chrome浏览器 2.输入论坛的网址: http://114.116.2.138:8090/forum.php 3.输入用户名admin 4.输入密码123456 5.点击登录 6.输入验证码 7.再点击登录 02准备工作 selenium环境搭建 参考地址: https://blog.csdn.net/python_jeff/article/details…

2024下半年软考系统架构设计师案例分析题试题与答案

解析中包含所有真题图片 解析中包含所有真题图片 解析中包含所有真题图片 解析中包含所有真题图片 第一题 解析见(点我):https://blog.csdn.net/u014624241/article/details/143701384 第二题 解析见(点我)&#…

使用 Python 和 Selenium 解决 hCaptcha:完整指南

如果你跟我一样,你可能也曾遇到过在抓取数据或自动化任务时试图绕过 hCaptcha 的挫折感。你懂的,hCaptcha 弹出来,你的脚本就戛然而止。但别担心!我们都经历过。好消息是,用 Python 和 Selenium 解决 hCaptcha 挑战并不…

[HAOI2015] 树上染色(树形 DP)

题目传送门https://www.luogu.com.cn/problem/P3177 解题思路 设 表示以 为根的子树染 个黑点的最大收益值。 设一共有 个节点,要染 个点。 完成 DP 状态的设计后,开始推导转移方程…… 对于一个点 ,它下面有一条通向 ,权…

Python学习从0到1 day28 Python 高阶技巧 ⑧ 递归

那就祝我们爬不同的山,还能回到同一条路上,不是时时见面,但是时时惦记之人 —— 24.11.13 递归 1.什么是递归 递归在编程中是一种非常重要的算法 递归:即方法(函数)自己调用自己的一种特殊编程写法 函数调用自己,即…

代码随想录算法训练营第二十二天|491.递增子序列、46.全排列、47.全排列 II

491.递增子序列 题目链接:. - 力扣(LeetCode) 文章讲解:代码随想录 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦…

二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入:root [1,null,2] 输出…

要读文献 | Acta Pharmacol Sin | 上海药物所徐华强团队发表综述:基于生成扩散模型的 AI 驱动抗体设计

近日,来自中国科学院上海药物研究所的徐华强团队在 Acta Pharmacologica Sinica 发表综述文章“AI-driven antibody design with generative diffusion models: current insights and future directions”。文章主要讨论了基于生成扩散模型的抗体设计的最新进展&…

Collections 工具类

在 Java 编程中,集合(Collections)是处理数据的核心工具之一。为了简化集合操作并提高代码的可读性和可维护性,JDK 提供了一个强大的工具类:java.util.Collections。这个类包含了一系列静态方法,用于对集合…

机器学习引领流体动力学新纪元:CFD、Fluent与OpenFOAM的深度融合

在科技日新月异的今天,机器学习正以前所未有的力量重塑着众多学科领域,其中,流体动力学便是受益匪浅的典范。作为计算流体力学(CFD)领域的两大巨头,Fluent与OpenFOAM正携手机器学习技术,共同开启…

django入门【05】模型介绍(二)——字段选项

文章目录 1、null 和 blank示例说明⭐ null 和 blank 结合使用的几种情况总结: 2、choices**choices 在 Django 中有以下几种形式:**(1) **简单的列表或元组形式**(2) **字典映射形式**(3&#…