springboot-配置文件优先级

news2024/11/17 12:54:36

官方文档 https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config

Spring Boot允许外部化配置,这样就可以在不同的环境中使用相同的应用程序代码。您可以使用各种外部配置源,包括Java属性文件、YAML文件、环境变量和命令行参数

属性值可以使用@Value注解直接注入到bean中,通过Spring的环境抽象访问,也可以通过@ConfigurationProperties绑定到结构化对象。

外部配置优先级

Spring Boot使用了一个非常特殊的PropertySource顺序,旨在允许合理的值覆盖。后面的属性源可以覆盖前面定义的值。来源按以下顺序考虑(优先级从小到大):

  1. Default properties (specified by setting SpringApplication.setDefaultProperties).
  2. @PropertySource annotations on your @Configuration classes.
    • 请注意,在刷新应用程序上下文之前,此类属性源不会添加到环境中。
    • 这对于logging.* spring.main.*在刷新开始之前就要set的配置来说:太晚了
  3. Config data (such as application.properties files).
  4. A RandomValuePropertySource that has properties only in random.*.
  5. OS environment variables.
  6. Java System properties (System.getProperties()). ; VM options,使用java -Dage=18
  7. JNDI attributes from java:comp/env.
  8. ServletContext init parameters.
  9. ServletConfig init parameters.
  10. Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property).
  11. Command line arguments.
  12. properties attribute on your tests. Available on @SpringBootTest and the test annotations for testing a particular slice of your application.
  13. @DynamicPropertySource annotations in your tests.
  14. @TestPropertySource annotations on your tests.
  15. Devtools global settings properties in the $HOME/.config/spring-boot directory when devtools is active.

在这里插入图片描述
最终转换的执行命令: java -Dage=22 -classpath **.jar cn.jhs.spring.boot.App --name=joe
执行结果name=joe,age=22,sex=M

Application Properties优先级

https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config.files

springboot默认会加载application.yaml或application.properties中的配置信息.
!!!注意: 同名文件,".properties"优先级大于".yaml"

1.application.properties and YAML

1.1 优先级

在这里插入图片描述

案例说明:
在这里插入图片描述

1.2 spring.config.name

如果你不喜欢用application作为配置文件名,可以通过指定spring.config.name环境属性来切换到另一个文件名。

# myproject.properties/yaml
java -jar myproject.jar --spring.config.name=myproject
1.3spring.config.location

还可以使用spring.config.location环境属性来引用显式位置。此属性接受一个逗号分隔的列表,其中包含要检查的一个或多个位置。

# 若default.properties与override.properties存在同名的配置,后面的会覆盖前面的; **last-wins**策略
$ java -jar myproject.jar --spring.config.location=\
    optional:classpath:/default.properties,\
    optional:classpath:/override.properties
1.4 spring.config.additional-location
#1. 设置 spring.config.additional-location
spring.config.additional-location=optional:classpath:/custom-config/,optional:file:./custom-config/

#2.优先级(优先级从小到大,后面覆盖前面)
## additional-location高于spring.config.location优先级
optional:classpath:/;optional:classpath:/config/
optional:file:./;optional:file:./config/;optional:file:./config/*/
optional:classpath:custom-config/
optional:file:./custom-config/

2.application-{profile}.properties and YAML

https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config.files.profile-specific

Spring Boot还会尝试使用命名约定application-{profile}来加载特定于profile的文件。例如,如果您的应用程序激活一个名为prod的配置文件,那么application.yaml 和 application-prod.yaml 都会被使用。

特定于profile的文件总是覆盖非特定的配置。
如果指定了多个profile,则采用last-wins策略。例如,如果spring.profiles.active设置为prod,live由属性指定,值在application-prod.properties属性可以被application-live.properties中的属性覆盖。

2.1 last-win 综合案例
#1. profiles : prod,live

#2. 存在配置文件
/cfg
  application-live.properties
/ext
  application-live.properties
  application-prod.properties

# 3.1 若 spring.config.location=classpath:/cfg/,classpath:/ext/ ,优先级(后面的覆盖前面)
# /cfg 总是会被 /ext 覆盖
/cfg/application-live.properties
/ext/application-prod.properties
/ext/application-live.properties

# 3.2 若 spring.config.location=classpath:/cfg/;classpath:/ext/    (注意是; 不是,)
# # /cfg 和/ext 优先级一致
/ext/application-prod.properties
/cfg/application-live.properties
/ext/application-live.properties

3. jar包外的 application.properties and YAML

4 jar包外的application-{profile}.properties and YAML



其它

yaml分隔符

yaml可以使用---分割不同的配置块,当spring.profiles.active=dev时,配置文件优先级:
在这里插入图片描述
此时的environment.getPropertySources().propertySourceList
在这里插入图片描述

@PropertySource(value={xx,yy}) 多个配置

@Component
@ConfigurationProperties(prefix = "my.cache")
//注意:默认仅支持 *.properties
@PropertySource(value = {"classpath:cache.properties","file:./config/cache.properties"}, ignoreResourceNotFound = true)
public class CacheConfigProperties {
    private String name;
    private long timeout;
}

这里@PropertySource引入的资源,跟code顺序无关, 同样按照 file > classpath的优先级来加载。

所以我们可以在project中填写默认的配置。
部署服务器时,在file目录下,填写实际的配置。

宽松的绑定规则

https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config.typesafe-configuration-properties.relaxed-binding

Spring Boot使用了一些宽松的规则将环境属性绑定到@ConfigurationProperties bean上,因此环境属性名和bean属性名不需要完全匹配

@ConfigurationProperties class:
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "my.main-project.person")
public class MyPersonProperties {

    private String firstName;

    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

}

在上述代码中,可以使用下列属性名。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1076925.html

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

相关文章

PTA 7-4 包装机(单调栈)

题目 一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道,放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时,机械手将抓取筐顶部的一件物品&…

ssti 常见注入模块利用

文件读取 python脚本(这里以重庆橙子科技jinjia2模板注入为例) import requests url http://39.104.177.130:18080/flaskBasedTests/jinja2/ for i in range(500):data {"name":"{{().__class__.__base__.__subclasses__()["str…

面试经典 150 题 22 —(数组 / 字符串)— 28. 找出字符串中第一个匹配项的下标

28. 找出字符串中第一个匹配项的下标 方法一 class Solution { public:int strStr(string haystack, string needle) {if(haystack.find(needle) string::npos){return -1;}return haystack.find(needle);} };方法二 class Solution { public:int strStr(string haystack, s…

TensorFlow学习:使用官方模型进行图像分类、使用自己的数据对模型进行微调

前言 上一篇文章 TensorFlow案例学习:对服装图像进行分类 中我们跟随官方文档学习了如何进行预处理数据、构建模型、训练模型等。但是对于像我这样的业余玩家来说训练一个模型是非常困难的。所以为什么我们不站在巨人的肩膀上,使用已经训练好了的成熟模…

《向量数据库指南》——向量数据库 有必要走向专业化吗?

向量数据库 有必要走向专业化吗? 向量数据库系统的诞生,来源于具体业务需求——想要高效处理海量的向量数据,就需要更细分、更专业的数据基础设施,为向量构建专门的数据库处理系统。 但这种路径是必须的吗? 从产品层面讲,如果传统数据库厂商不单独研发向量数据库,那么…

电脑系统升级Win11变卡顿?如何解决!

关于Win11系统更新的相关问题,Win11每一次更新之后会给大家带来更多功能!但是每次更新也可能会出现掉驱动、无法打开应用、甚至是蓝屏或者进不去主页等问题!所以为了帮助大家预防这些更新出现的后遗症,分享了一些小的方法&#xf…

JavaScript 编写一个 数值转换函数 万以后简化 例如1000000 展示为 100万 万以下原来数值返回

很多时候 我们看一些系统 能够比较只能的展示过大的数值 例如 到万了 他就能展示出 多少 多少万 看着很奇妙 但实现确实非常的基础 我们只需要一个这样的函数 //数值转换函数 convertNumberToString(num) {//如果传入的数值 不是数字 且也无法转为数字 直接扔0回去if (!parse…

学习网络安全得多少费用?网络安全入门了解

前言 网络安全是指对网络系统、硬件、软件和系统数据的保护。不因偶然或者其它原因导致破坏、更改和数据泄露情况。确保网络安全,防止网站被攻击、系统被病毒感染等。随着网络的快速发展,越来越多的用户和公司认识到网络安全的重要性,许多人…

云原生Kubernetes:Rancher管理k8s集群

目录 一、理论 1.Rancher 2.Rancher 安装及配置 二、实验 1.Rancher 安装及配置 三、问题 1. Rancher 部署监控系统报错 四、总结 一、理论 1.Rancher (1) 概念 Rancher 简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实现了 Kubernetes …

持安科技何艺获中国信通院2022-2023年零信任领域标准卓越贡献者

近日,在中国信息通信研究院和中国通信标准化协会联合主办的“2023 SecGo云和软件安全大会”上,零信任办公安全明星企业持安科技创始人兼CEO何艺获评为2022-2023年度零信任领域标准卓越贡献者。 由中国信通院发布可信安全优秀个人&#xff0…

各报文段格式集合

数据链路层-- MAC帧 前导码8B:数据链路层将封装好的MAC帧交付给物理层进行发送,物理层在发送MAC帧前,还要在前面添加8字节的前导码(分为7字节的前同步码1字节的帧开始定界符)MAC地址长度6B数据长度46~1500B…

ROS 工作空间及功能包

ROS工作空间(workspace)是一个存放工程开发相关文件的文件夹。 1. 什么是ROS的工作空间 使用ROS实现机器人开发的主要手段是写代码,这些代码文件存放的空间就是工作空间。 工作空间(workspace)是一个用于存放工程开发…

电表采集器采集的是哪些参数?

电表采集器是一种能够远程收集电表数据的设备,通常被用于电能计量和管理。电表采集器能够通过无线通信技术,如GPRS、CDMA、3G、4G、5G等,将电表数据传输到数据中心,以便进行数据分析和处理。 电表采集器采集的参数包括以下几个方面…

naco(替代Eureka)注册中心

Nacos初步学习 Nacos 是一个开源的服务注册和配置中心,它允许您注册、注销和发现服务实例,并提供了配置管理的功能。下面是Nacos的最基础用法: 1. 服务注册和发现: 首先,您需要将您的应用程序或服务注册到Nacos中。…

Android maven could not get http://192.xx

网页流程仓库ip都能访问,android 发包出现如上提示。原来我电脑自身使用了 vpn,导致 红色框内的代理打开了,注释点问题解决。android studio有自身的代理文件,不依赖windows系统的代理配置,即使set http_proxy也是无效…

【深入MaxCompute】人力家:借助Information Schema合理治理费用

简介: 人力家是由阿里钉钉和人力窝共同投资成立,帮助客户进入人力资源数字化,依靠产品技术创新驱动战略的互联网公司。本文将为大家带来MaxCompute与人力家客户案例深度解读。 作者:石玉阳 人力家 高级数据研发工程师 业务简介 …

“益路同行”栏目人物专访 第0010期——中国公益万里行发起人李现

中国善网在本届(第十届)慈展会上特别推出了《益路同行》采访栏目,《益路同行》栏目旨在寻觅公益之路上同行者的故事,挖掘公益更深层次的内涵,探索新时代公益发展道路。希望公益企业、人物、故事被更多人看到&#xff0…

Spring Boot项目在Windows上的自启动策略与Windows自动登录配置

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

腾讯发布《2023数字经济高质量发展报告》

导读 2018年9月30日,腾讯宣布“扎根消费互联网,拥抱产业互联网”的全新战略,并进行历史上第三次大规模组织变革,成立云与智慧产业事业群(简称CSIG),开启ToB领域的深耕。也是在这一年&#xff…

有什么好用的站内搜索SaaS能帮网站实现站内搜索功能?

在当今数字时代,拥有一个用户友好且高效的网站对于企业在线发展至关重要。一个能够极大增强用户体验的关键功能就是网站内部搜索能力。这正是站内搜索SaaS发挥作用的地方。 站内搜索SaaS是指一种基于云的软件解决方案,使网站能够实现内部搜索功能。借助…