Spring Boot,两种配置文件
Spring Boot 主要支持两种配置文件格式,它们允许你外部化应用程序的配置:.properties
文件和 .yml
(或 .yaml
) 文件。以下是关于这两种配置文件的关键知识点:
1. application.properties
文件
- 格式: 基于键值对的纯文本文件。
- 语法:
key=value
- 每一行通常表示一个配置项。
- 可以使用
#
或!
作为注释行的开头。
- 语法:
- 层级结构: 使用点 (
.
)符号来表示属性的层级关系。- 例如:
spring.datasource.url=jdbc:mysql://localhost/mydb
- 例如:
- 列表/数组: 可以通过在键名后使用方括号
[]
和索引来表示列表。- 例如:
my.list[0]=apple my.list[1]=banana
- 例如:
- 可读性: 对于简单的配置,可读性尚可。但对于复杂或嵌套层级较深的配置,可能会显得冗长且不易阅读。
- 特殊字符: 需要对某些特殊字符进行转义 (例如,
:
或=
在值中出现时)。 - 编码: 默认使用
ISO-8859-1
编码,如果需要使用其他编码(如UTF-8以支持中文),需要IDE或编辑器正确处理。
2. application.yml
(或 application.yaml
) 文件
- 格式: YAML (YAML Ain’t Markup Language),是一种人类可读的数据序列化标准。
- 语法: 使用缩进来表示层级关系和结构(通常是2个空格,不允许使用制表符 Tab)。
- 键值对使用冒号 (
:
) 分隔:key: value
(冒号后通常有一个空格)。
- 层级结构: 通过缩进自然地表达层级。
- 例如:
spring:datasource:url: jdbc:mysql://localhost/mydb
- 例如:
- 列表/数组: 使用连字符 (
-
) 开头表示列表项。- 例如:
my:list:- apple- banana
- 也可以内联表示:
my.anotherlist: [orange, grape]
- 例如:
- 可读性: 对于复杂和嵌套的配置数据,YAML 通常比
.properties
文件更简洁、更易读。 - 数据类型: 更直观地支持布尔值 (
true
/false
), 数字, 字符串 (通常不需要引号,除非包含特殊字符或为了清晰)。 - 多文档支持: 一个 YAML 文件可以通过
---
分隔符包含多个文档,这在Spring Boot中常用于定义不同Profile的配置于同一个文件中。
通用关键知识点 (适用于两者)
- 默认文件名: Spring Boot 会自动加载位于
src/main/resources
目录下的application.properties
或application.yml
文件。 - 加载优先级:
- 如果在同一目录下同时存在
application.properties
和application.yml
,.properties
文件中的配置会覆盖.yml
文件中的配置。 - Spring Boot 有一个详细的外部化配置加载顺序(包括命令行参数、环境变量、不同目录下的配置文件等),
src/main/resources
下的这些文件是其中的一部分。
- 如果在同一目录下同时存在
- Spring Profiles:
- 两种格式都支持通过特定的命名约定为不同的环境(如开发、测试、生产)定义不同的配置。
.properties
:application-{profile}.properties
(例如:application-dev.properties
).yml
:application-{profile}.yml
(例如:application-prod.yml
)- 也可以在单个
application.yml
文件中使用---
分隔并结合spring.config.activate.on-profile
(较新版本) 或spring.profiles
(较旧版本,不推荐用于多文档激活) 来指定不同profile的配置块。
- 通过
spring.profiles.active
属性来激活一个或多个profile。
- 两种格式都支持通过特定的命名约定为不同的环境(如开发、测试、生产)定义不同的配置。
- 属性覆盖: 高优先级的配置源可以覆盖低优先级的配置源。例如,命令行参数可以覆盖配置文件中的属性。
- 占位符 (Placeholders): 可以在配置文件中使用
${...}
形式的占位符来引用其他属性的值,或者系统属性、环境变量等。- 例如:
app.description=${app.name} is a Spring Boot application
- 例如:
- 配置绑定 (
@ConfigurationProperties
,@Value
):- Spring Boot 提供了强大的机制将配置文件中的属性值绑定到Java对象的字段上。
@Value("${my.property}")
用于注入单个属性值。@ConfigurationProperties(prefix = "my.config")
用于将一组属性绑定到一个POJO类。
- Spring Boot 提供了强大的机制将配置文件中的属性值绑定到Java对象的字段上。
- Relaxed Binding (宽松绑定): Spring Boot 在将环境变量或配置文件中的属性绑定到
@ConfigurationProperties
Bean时,支持多种命名方式的匹配 (例如,my.property-name
可以匹配MY_PROPERTY_NAME
环境变量或myPropertyName
Java Bean属性)。 - 位置: 除了
src/main/resources
,Spring Boot 还会从其他位置加载配置文件,例如:- 当前目录下的
/config
子目录 - 当前目录
- 类路径下的
/config
包 - 类路径根目录 (
src/main/resources
)
- 当前目录下的
选择与总结
- 简洁性与复杂配置: YAML 通常因其在处理复杂、层级化配置时的简洁性和可读性而受到青睐。
- 团队偏好: 选择哪种格式很多时候取决于团队的熟悉程度和偏好。
- Spring Boot的灵活性: Spring Boot 对两种格式都提供了一流的支持,可以根据项目需求灵活选择或甚至混合使用(尽管不常见)。
理解这些关键点有助于更有效地管理和维护Spring Boot应用程序的配置。
相关文章:
Spring Boot,两种配置文件
Spring Boot 主要支持两种配置文件格式,它们允许你外部化应用程序的配置:.properties 文件和 .yml (或 .yaml) 文件。以下是关于这两种配置文件的关键知识点: 1. application.properties 文件 格式: 基于键值对的纯文本文件。 语法: keyvalu…...
OpenLayers 地图标注之图文标注
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图标注是将空间位置信息点与地图关联、通过图标、窗口等形式把相关信息展现到地图上。在WebGIS中地图标注是重要的功能之一,可以为用户提供…...

设计模式——简单工厂模式(创建型)
摘要 本文主要介绍了简单工厂模式,包括其定义、结构、实现方式、适用场景、实战示例以及思考。简单工厂模式是一种创建型设计模式,通过工厂类根据参数决定创建哪一种产品类的实例,封装了对象创建的细节,使客户端无需关心具体类的…...

qt ubuntu 20.04 交叉编译
一、交叉编译环境搭建 1.下载交叉编译工具链:https://developer.arm.com/downloads/-/gnu-a 可以根据自己需要下载对应版本,当前最新版本是10.3, 笔者使用10.3编译后的glibc.so版本太高(glibc_2.3.3, glibc_2.3.4, glibc_2.3.5)…...
java中cocurrent包常用的集合类操作
文章目录 前置ConcurrentHashMapCopyOnWriteArrayList/CopyOnWriteArraySet 前置 常规的集合类,比如 ArrayList,HashMap 当作为多线程下共享的变量时候,操作它们时会涉及线程安全的问题 ConcurrentHashMap 适合:需要频繁读写的…...

晶振频率稳定性:5G 基站与航天设备的核心竞争力
在当今科技飞速发展的时代,电子设备的性能和可靠性至关重要。晶振作为电子设备中的核心部件,为系统提供精确的时间和频率基准。晶振的频率稳定性直接影响着设备的整体性能,从日常生活中广泛使用的智能手机、智能穿戴设备,到对精度…...

基于python脚本进行Maxwell自动化仿真
本文为博主进行Maxwell自动化研究过程的学习记录,同时对Maxwell自动化脚本(pythonIron)实现方法进行分享。 文章目录 脚本使用方法脚本录制与查看常用脚本代码通用开头定义项目调整设计变量软件内对应位置脚本 设置求解器软件内对应位置脚本…...

Blueprints - List View Widget
一些学习笔记归档; 需要读取动态数据把多个条目显示在UI上的时候,可能用到List View组件;假如有Widget要使用在List View中,此Widget需要继承相关接口: 这样就能在List View控件中选择已经继承接口的Widget组件了&…...

docker-compose搭建prometheus以及grafana
1. 什么是 Prometheus? Prometheus 是一个开源的系统监控和告警工具,由 SoundCloud 于 2012 年开始开发,现为 CNCF(Cloud Native Computing Foundation)项目之一。它特别适合云原生环境和容器编排系统(如 …...
进阶智能体实战八、需求分析助手(基于qwen多模态大模型对图文需求文档分析)(帮你生成 模块划分+页面+表设计、状态机、工作流、ER模型)
🚀 基于通义千问大模型的智能需求分析助手:一键生成需求分析、模块划分、ER 图和工作流! 在软件开发的早期阶段,需求分析是至关重要的一环。然而传统方式往往需要产品经理和架构师投入大量精力分析需求文档、划分模块、设计数据结构,效率低、容易出错。 为了解决这一痛…...
Git -> Git Stash临时保存当前工程分支修改
Git Stash 基本概念 git stash 用于临时保存当前工作目录的修改,让你可以快速切换到一个干净的工作状态,之后再恢复这些修改。 1. 保存当前修改 git stash # 或者添加描述信息 git stash save "修改描述"2. 查看stash列表 git stash list3…...

多线程和并发之线程
线程 前面讲到进程:为了并发执行任务(程序),现代操作系统才引进进程的概念 分析: 创建开销问题:创建一个进程开销:大 子进程需要拷贝父进程的整个地址空间 通信开销问题:进程间的通…...

apptrace 的优势以及对 App 的价值
官网地址:AppTrace - 专业的移动应用推广追踪平台 apptrace 的优势以及对 App 的价值 App 拉起作为移动端深度链接技术的关键应用,能实现从 H5 网页到 App 的无缝跳转,并精准定位到 App 内指定页面。apptrace 凭借专业的技术与丰富的经验…...

android studio debug调试出现 IOException异常
解决Android调试端口无法打开的问题,出现"Unable to open debugger port"错误时,可以进入app设置,选择Debugger选项,将Debug type更改为Java Only模式。这个方法适用于Android Studio调试时遇到的端口连接问题ÿ…...
PySpark 中使用 SQL 语句和表进行计算
PySpark 中使用 SQL 语句和表进行计算 PySpark 完全支持使用 SQL 语句和表进行 Spark 计算。以下是几种常见的使用方式: 1. 使用 Spark SQL from pyspark.sql import SparkSession# 创建 SparkSession spark SparkSession.builder.appName("SQLExample&quo…...
[Python] Python中的多重继承
文章目录 Lora中的例子 Lora中的例子 https://github.com/michaelnny/QLoRA-LLM/blob/main/qlora_llm/models/lora.py#L211C1-L243C10如果继承两个父类,并且父类的__init__参数不一样,则可以显式的调用父类init;如果用super().__init__()则需…...
在 RedHat 系统(RHEL 7/8/9)中安装 pythonnet 和 .NET Core 的完整指南
1. 安装 .NET Core SDK RHEL 8/9(推荐) bash # 添加微软仓库 sudo rpm -Uvh https://packages.microsoft.com/config/rhel/8/packages-microsoft-prod.rpm# 安装 .NET 8 SDK(包含运行时) sudo dnf install -y dot…...

vr中风--数据处理模型搭建与训练
# -*- coding: utf-8 -*- """ MUSED-I康复评估系统(增强版) 包含:多通道sEMG数据增强、混合模型架构、标准化处理 """ import numpy as np import pandas as pd from sklearn.model_selection import train_te…...
Socket网络编程之UDP套件字
基于的UDP套件字编程流程 UDP传输层的协议,面向无连接,数据报的传输层协议。 “ 无连接 ”:不可靠 在网络环境较好的情况下,UDP效率较高在网络环境较差的情况下,UDP可能存在丢包的情况同时一些“ 实时应用 ” 采用UD…...

前端学习(7)—— HTML + CSS实现博客系统页面
目录 一,效果展示 二,实现博客列表页 2.1 实现导航栏 2.2 实现个人信息 2.3 实现博客列表 三,实现博客正文页 3.2 复用 3.4 实现博客正文 四,实现博客登录页 4.1 版心 4.2 登录框 五,实现博客编辑页 5.1 …...
Bert和GPT区别
BERT(Bidirectional Encoder Representations from Transformers)和 GPT(Generative Pre-trained Transformer)都基于 Transformer 架构,但在设计目标、预训练任务和应用场景上有很大区别: 1. 架构方向性 B…...
聊一聊接口测试中缓存处理策略
目录 一、强制绕过缓存 添加时间戳参数 修改请求头 二、主动清除缓存 清除本地缓存 清除服务端缓存(需权限) 清除CDN缓存 三、测试缓存逻辑 首次请求获取数据 记录响应头中的缓存标识 验证缓存生效 测试缓存过期 四…...

RuoYi前后端分离框架实现前后端数据传输加密(二)之前端篇
一、背景 本文是RuoYi前后端分离框架实现前后端数据传输加密(一)之后端篇文章配套的,主要介绍前端对自定义字段传输加密的实现,两篇文章结合可以完整的完成RuoYi前后端分离框架对API通信过程中实现自定义字段加密传输。前端的加解密实现,不涉及到界面的修改,仅仅是方法的…...
如何使用.Net Reactor 批量加密 DLL
若在日常工作中加密操作的使用频率较高,每次启动程序并执行选择 DLL 文件等操作均会显得较为繁琐。在此,分享一种可提升操作效率的方法:通过命令行方式调用脚本,即可实现 DLL 或 Exe 文件的批量加密处理。具体操作如下:…...
基于视觉的车道线检测完整代码:让驾驶更安全的开源解决方案
基于视觉的车道线检测完整代码:让驾驶更安全的开源解决方案 【下载地址】基于视觉的车道线检测完整代码 这是一个基于视觉的车道线检测开源项目,提供完整的代码示例,采用滑动窗口算法实现。项目通过逐行扫描图像,精准识别曲线车道…...
Intellij IDEA 查找接口实现类的快捷键
快捷键是 IntelliJ IDEA(包括 PyCharm、WebStorm 等 JetBrains 家族 IDE) 中非常常用的代码导航功能。下面是对你提到的两个快捷键的详细解释和用途说明: 🔍 1. 查找接口的实现类(或方法的实现) …...

鸿蒙仓颉开发语言实战教程:自定义tabbar
大家周末好呀,今天继续分享仓颉语言开发商城应用的实战教程,今天要做的是tabbar。 大家都知道ArkTs有Tabs和TabContent容器,能够实现上图的样式,满足基本的使用需求。而仓颉就不同了,它虽然也有这两个组件,…...
03.MySQL表的操作详解
MySQL表的操作详解 MySQL 表的操作概述创建表 2.1 创建表的基本语法查看表结构修改表 4.1 新增列 4.2 修改列属性 4.3 修改列名 4.4 修改表名 4.5 删除列删除表 1. MySQL表的操作概述 MySQL表的操作是数据库开发和管理中的核心内容,主要涉及**数据定义语言&#…...

28 C 语言作用域详解:作用域特性(全局、局部、块级)、应用场景、注意事项
1 作用域简介 作用域定义了代码中标识符(如变量、常量、数组、函数等)的可见性与可访问范围,即标识符在程序的哪些位置能够被引用或访问。在 C 语言中,作用域主要分为三类: 全局作用域局部作用域块级作用域 需注意&am…...

MySQL 事务解析
1. 事务简介 事务(Transaction) 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 经典案例࿱…...