【Spring Boot 初识丨八 丨 外部化配置(二)】外部应用程序属性

news2024/9/28 21:24:00

上一篇讲了 Spring Boot 的外部化配置的加载顺序及一些简单的属性说明
本篇来讲一讲 外部化配置一些比较重要的部分
Spring Boot 初识:
【Spring Boot 初识丨一】入门实战
【Spring Boot 初识丨二】maven
【Spring Boot 初识丨三】starter
【Spring Boot 初识丨四】主应用类
【Spring Boot 初识丨五】beans
【Spring Boot 初识丨六】依赖注入
【Spring Boot 初识丨七】外部化配置(一)

外部化配置详解

  • 外部应用程序属性
    • 可选位置
    • 通配符位置
    • 特定属性profile
    • 属性占位符

外部应用程序属性


  当您的应用程序启动时,Spring Boot 将自动从以下位置查找并加载application.propertiesapplication.yaml文件:

  1. classpath:

     a:classpath 根路径
     b:classpath 路径下的 /config 包

  2. 当前目录:
     a:当前目录
     b:当前目录的 /config 子目录
     c: /config 子目录 的直接子目录

   SpringApplication 会自动加载以下路径下的 application.properties 配置文件,将其中的属性读到 Spring 的Environment中。

注:

以上列表的配置文件会根据顺序(按优先级排序),后序的配置会覆盖前序的配置。
可以选择 YAML(yml) 配置文件替换 properties 配置文件。

如果不喜欢 application.properties 作为配置文件名,可以使用 spring.config.name 环境变量替换:

$ java -jar myproject.jar --spring.config.name=myproject

还可以使用 spring.config.location 环境变量指定配置文件路径(此属性接受以逗号分隔的一个或多个要检查位置的列表):

$ java -jar myproject.jar --spring.config.location=\
    optional:classpath:/default.properties,\
    optional:classpath:/override.properties

📞 提示:
  如果位置是可选的并且您不介意它们不存在, 请使用前缀optional: 。
🔔警告:
  spring.config.name、spring.config.location、 和spring.config.additional-location很早就被用来确定必须加载哪些文件。它们必须定义为环境属性(通常是操作系统环境变量、系统属性或命令行参数)。

可选位置


  默认情况下,当指定的配置数据位置不存在时,Spring Boot 将抛出ConfigDataLocationNotFoundException异常,并且您的应用程序将无法启动。

  如果您想指定一个位置,但不介意它并不总是存在,则可以使用前缀optional: 。您可以将此前缀与spring.config.locationspring.config.additional-location属性以及spring.config.import声明一起使用。

  例如,即使文件丢失,spring.config.import值 也允许您的应用程序启动。optional:file:./myconfig.propertiesmyconfig.properties

  如果您想忽略所有ConfigDataLocationNotFoundExceptions 并始终继续启动您的应用程序,您可以使用spring.config.on-not-found属性。SpringApplication.setDefaultProperties(…​)或与系统/环境变量一起使用将值设置为忽略。

通配符位置


  如果配置文件位置包含最后一个路径段的*字符,则它被视为通配符位置。加载配置时会扩展通配符,以便同时检查直接子目录。当存在多个配置属性源时,通配符位置在 Kubernetes 等环境中特别有用。

  例如,如果您有一些 Redis 配置和一些 MySQL 配置,您可能希望将这两个配置分开,同时要求它们都存在于application.properties文件中。这可能会导致两个单独的application.properties文件安装在不同的位置,例如/config/redis/application.properties/config/mysql/application.properties。在这种情况下,使用config/*/通配符位置, 将导致两个文件都被处理。

  默认情况下,Spring Boot 在默认搜索位置中包含config/*/。这意味着将搜索 jar 之外的/config目录的所有子目录。

您可以通过spring.config.locationspring.config.additional-location属性使用通配符位置。

通配符位置必须仅包含一个*,并以*/作为目录的搜索位置或*/<filename>结尾,
对于属于文件的搜索位置,带有通配符的位置必须根据文件名的绝对路径按字母顺序排序。

通配符位置仅适用于外部目录。不能在类路径classpath:location 使用通配符。

特定属性profile

  除了application属性文件之外,Spring Boot 还将尝试使用命名约定application-{profile} 加载特定于配置文件的文件。例如,如果您的应用程序激活名为prod的配置文件并使用 YAML 文件,则application.yaml 和application-prod.yaml都会被考虑。

  配置文件特定的属性从与标准application.properties相同的位置加载,配置文件特定的文件始终覆盖非特定的文件。如果指定了多个配置文件,则应用最后获胜策略。例如,如果prod,live配置文件由spring.profiles.active属性指定,则 application-prod.properties中的值可以被 application-live.properties中的值覆盖。

  可以通过 spring.profiles.active 参数来激活 profile,如果没有激活的 profile,默认会加载 application-default.properties 中的配置。

属性占位符


  application.properties 中的值会被 Environment 过滤,所以,可以引用之前定义的属性。

app.name=MyApp
app.description=${app.name} is a Spring Boot application written by ${username:Unknown}

注:你可以使用此技术来创建 Spring Boot 属性变量。请参考: “Use ‘Short’ Command Line Arguments

在这里插入图片描述

  如果喜欢的话,欢迎 🤞关注 👍点赞 💬评论 🤝收藏  🙌一起讨论
  你的评价就是我✍️创作的动力!					  💞💞💞

参考资料
Spring Boot 官方文档 features-external-config

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

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

相关文章

SortShuffleManager的bypass机制触发条件是什么?

SortShuffleManager的运行机制主要分成两种&#xff0c;一种是普通运行机制&#xff0c;另一种是bypass运行机制。当shuffle write。 task的数量小于等于spark.shuffle.sort.bypassMergeThreshold参数的值时(默认为200)&#xff0c;就会启用bypass机制。 该模式下&#xff0c…

置信区间笔记1 模型性能的置信区间

目录 补充实验-TCASVM置信区间 成功运行代码 误差棒图 置信区间与泛化性的关系 置信区间的计算公式 分类精度的置信区间 F1的置信区间 误差棒图 show confidence intervals for the prediction accuracy 补充实验-TCASVM置信区间 AUC的置信区间参考: https://blog.c…

加密接口如何测试?

随着互联网技术的发展&#xff0c;服务安全性和数据安全性变的越来越重要&#xff0c;提供接口服务的系统往往会应用各种加密技术&#xff0c;保证接口的安全调用&#xff0c;如何应用工具来实现加密接口测试成为一项必要技能。在讲解如何用Jmeter实现接口安全性测试之前&#…

【论文阅读】AugGPT: Leveraging XXX for Text Data Augmentation(AugGPT:利用XXX进行文本数据增强)

文章目录 一.论文信息二.论文内容摘要2.相关工作2.1.数据增强 4.方法4.1.整体框架4.4.Baseline方法4.6.评价指标4.6.1.余弦相似度4.6.2.TransRate 6.总结和讨论 一.论文信息 论文题目&#xff1a; AugGPT: Leveraging XXX Transformer for Text Data Augmentation&#xff08;…

RocketMQ --- 高级篇

一、高级功能 1.1、消息存储 分布式队列因为有高可靠性的要求&#xff0c;所以数据要进行持久化存储。 消息生成者发送消息MQ收到消息&#xff0c;将消息进行持久化&#xff0c;在存储中新增一条记录返回ACK给生产者MQ push 消息给对应的消费者&#xff0c;然后等待消费者返回…

HR谈薪之前,先要工资流水,礼貌吗?

hr谈薪前先要工资流水&#xff0c;这种做法礼貌吗&#xff1f;如果是你&#xff0c;你会给吗&#xff1f; 一部分网友认为可以不给&#xff0c;因为薪水是自己的隐私&#xff0c;跟求职无关&#xff0c;不需要告诉hr。 有人说&#xff0c;公司都双标&#xff0c;让你对工资保密…

LLM - 搭建 ProteinGPT 结合蛋白质结构知识的 ChatGPT 系统

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131403263 论文&#xff1a;ProteinChat: Towards Enabling ChatGPT-Like Capabilities on Protein 3D Structures 工程&#xff1a;ht…

高速电路设计系列分享-电源噪声分析

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; 当今许多应用都要求高速采样模数转换器&#xff08;ADC)具有12位或以上的分辨率&#xff0c;以便用户能够进行更精确的系统测量。然而&#xff0c;更高分辨率…

高速电路设计系列分享-低频和高频接地

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; 在大多数电子系统中&#xff0c;降噪是一个重要设计问题。与功耗限制、环境温度变化、尺寸限制以及速度和精度要求一样.必须处理好无所不在的噪声因素&#…

【SQL】查询数据库每张表的数据及索引占用大小

【SQL】查询数据库每张表的数据及索引占用大小 SELECTa.*,CONCAT( a.总大小 / 1024000000, G ) 总大小G FROM(SELECTTABLE_SCHEMA,TABLE_NAME,sum( DATA_LENGTH ) 数据大小,sum( INDEX_LENGTH ) 索引大小,( sum( DATA_LENGTH ) sum( INDEX_LENGTH ) ) 总大小FROMinformation_s…

【Linux】如何在tty终端terminal上实现上下翻页?ubuntu\centos

一、问题背景 有时候&#xff0c;我们在tty终端执行一条命令&#xff0c;会产生很多输出文本&#xff0c;这些文本占满了整个屏幕还不止。 于是乎&#xff0c;我们没办法查看到上面的输出。 在图形界面中的终端&#xff0c;可以用shift Pageup或shift Pagedown来翻页。 …

两小时快速入门 TypeScript 基础(一)工作流、基本类型、高级类型

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端&#xff08;Node.js 等&#xff09; &#x1f4c3;个人状态&#xff1a; 2023届本科毕业生&#xff0c;已拿多个前端 offer&#x…

vscode实现本地代码自动同步到远程机器

在用vscode编码时经常会遇到代码在本地&#xff0c;实际代码编译运行在远端的服务器上&#xff0c;如果在本地修改了代码还需要用比较工具同步到远程服务器上&#xff0c;这样的开发模式非常费时费力&#xff0c;有时候还会漏代码&#xff0c;给开发带来了隐患。 以上的不变可以…

大类资产轮动策略

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

Roop:显卡GPU版软件已就位,速度提升28倍!

我在本地的一台电脑行做了个简单的对比&#xff0c;同一个小视频&#xff0c;CPU要5分多钟&#xff0c;GPU只要12秒。而且&#xff0c;内存的需求量也大幅度降低了。 美队这个架子&#xff0c;给托尼用&#xff0c;也挺不错哦&#xff01; 这次的版本&#xff0c;准确来说是GPU…

小程序中实现二维数组的展示

目录 1 定义变量2 外层循环3 内层循环总结 我们在小程序中有一类需求就是要显示二维数组&#xff0c;二维数组是指数组中的元素也是数组&#xff0c;比如我们以菜谱为例&#xff0c;菜谱有名称和用料&#xff0c;用料就又是一个数组&#xff0c;如果我们构造数据可以是这样 [ {…

纯干货:怎么样去满足客户需求,增强用户粘性?

无论是销售产品还是提供服务&#xff0c;最终目标是为客户提供他们想要和需要的东西。但随着竞争的加剧和客户期望的变化&#xff0c;了解这些需求变得越来越复杂。因此我们需要识别和满足他们可以产生重大影响的地方。 识别和了解客户需求的好处 想象一下&#xff0c;你在家乡…

详解volatile关键字、线程的可见性、有序性

0、引言 在juc多线程并发编程中&#xff0c;常常需要关注线程的“可见性”与“有序性”。本文将详细介绍这两部分内容&#xff0c;以及volatile关键字的使用。 阅读本文前需要一些jvm运行时内存、进程与线程、共享内存、锁等相关知识。 1、可见性 1.1 定义 定义&…

DOTA-Acrylamide,DOTA-DBCO,DOTA-MeTz,三者DOTA双功能螯合剂信息说明总结

今天小编分享DOTA螯合剂试剂&#xff1a;它们分别是DOTA-Acrylamide&#xff0c;DOTA-DBCO&#xff0c;DOTA-MeTz&#xff0c;今天整体分享一下相关的知识&#xff0c;一起看看吧。 &#xff08;文章编辑来源于&#xff1a;西安凯新生物科技有限公司小编WMJ&#xff09; 一、D…

【css】动画:行走的人

素材&#xff1a; 链接&#xff1a; https://img1.baidu.com/it/u3361754298,960828090&fm253&fmtauto&app138&fPNG?w1472&h325 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…