惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
有赞技术团队
有赞技术团队
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
D
DataBreaches.Net
F
Full Disclosure
腾讯CDC
博客园 - 【当耐特】
MyScale Blog
MyScale Blog
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
The Register - Security
The Register - Security
WordPress大学
WordPress大学
博客园 - 聂微东
雷峰网
雷峰网
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy International News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
A
Arctic Wolf
Scott Helme
Scott Helme
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tor Project blog
博客园 - 三生石上(FineUI控件)
Know Your Adversary
Know Your Adversary
AWS News Blog
AWS News Blog
G
Google Developers Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CERT Recently Published Vulnerability Notes
O
OpenAI News
Project Zero
Project Zero
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Application and Cybersecurity Blog
Application and Cybersecurity Blog
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
MongoDB | Blog
MongoDB | Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
P
Palo Alto Networks Blog
Schneier on Security
Schneier on Security

博客园 - 哈喽哈喽111111

RockyLinux SSH 跳板转发 3389(Windows 远程桌面)完整方案 MySQL使用自带的logrotate配置日志轮转 yum方式安装redis7 nacos新加用户操作 网络运营商禁止端口信息 Linux开机启动rc.local不生效的一般解决方案 Nginx流量拷贝ngx_http_mirror_module模块使用方法详解 Adobe 修改 hosts 文件 axios 投毒与好莱坞式骗术 Linux系统在使用systemctl启动服务的失败,报错如下:Error No space left on device git submodule 的增、查、改、删 Rocky Linux 安装 Google Chrome 浏览器 “头号玩家”—— 美国技术霸权下的全球虚拟货币资产收割行动深层解析 你是第几级 AI 编程 MySQL中通过关联update将一张表的一个字段更新到另外一张表中 Linux 的 Port Knocking 端口碰撞(端口敲门) MySQL解除死锁 jar文件解压缩操作 设置Windows服务器远程桌面能使用多个桌面 20251024- 使用shell脚本分库定时备份MySQL数据 禁用sentinel 在 Linux 中安装和配置 NTP 服务器和 NTP 客户端 用自带的Nginx为gitlab做白名单 Rocky9和Ubuntu使用pip安装python的库mysqlclient失败解决方式 在Spring Boot Admin中根据Nacos的命名空间来区分和管理不同的环境
springboot配置文件关系及加载顺序
哈喽哈喽111111 · 2025-09-25 · via 博客园 - 哈喽哈喽111111
1. 配置文件的作用
application.yml

    作用:
        这是项目的 默认配置文件,通常包含通用的基础配置。
        它适用于所有环境(如开发、测试、生产等),提供全局的默认值。

application-prod.yml

    作用:
        这是一个 环境特定的配置文件,用于定义针对某种特定环境(如生产环境)的配置。
        文件名中的 prod 表示生产环境(Production),类似的还有 dev(开发环境)、test(测试环境)等。

2. 加载顺序与优先级

Spring Boot 的配置文件加载遵循一定的规则,主要基于 profiles(环境配置)的概念。以下是加载顺序和优先级的详细说明:
加载顺序

    application.yml:
        Spring Boot 会首先加载 application.yml,作为默认的全局配置。
        这些配置会被应用于所有环境。

    application-{profile}.yml:
        如果指定了某个 profile(比如 prod),Spring Boot 会加载对应的配置文件(如 application-prod.yml)。
        这些配置会覆盖 application.yml 中相同名称的配置项。

优先级

    高优先级覆盖低优先级:
        具体来说,application-prod.yml 中的配置会覆盖 application.yml 中的同名配置。
        这种机制允许为不同环境定制化配置,而无需修改全局默认配置。

3. 如何指定 Profile

在 Spring Boot 中,可以通过多种方式指定当前使用的 profile:
方式 1: 在 application.yml 中指定

spring:
  profiles:
    active: prod

    这里指定了激活的 profile 为 prod,Spring Boot 会加载 application-prod.yml。

方式 2: 命令行参数

启动应用时,通过命令行参数指定 profile:

java -jar app.jar --spring.profiles.active=prod

方式 3: 环境变量

设置环境变量来指定 profile:

export SPRING_PROFILES_ACTIVE=prod

方式 4: JVM 参数

通过 JVM 参数指定 profile:

java -Dspring.profiles.active=prod -jar app.jar


4. 示例分析

假设我们有以下两个配置文件:
application.yml

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/default_db
    username: root
    password: root


application-prod.yml

server:
  port: 8081

spring:
  datasource:
    url: jdbc:mysql://prod-db-host:3306/prod_db
    username: prod_user
    password: prod_password


运行结果

    如果没有指定 profile,默认使用 application.yml:
        server.port = 8080
        数据库连接信息为 default_db。

    如果指定了 prod profile(例如通过 --spring.profiles.active=prod):
        server.port = 8081(application-prod.yml 覆盖了 application.yml 的端口配置)。
        数据库连接信息为 prod_db(application-prod.yml 覆盖了 application.yml 的数据库配置)。

5. 配置文件的合并逻辑

Spring Boot 在加载配置文件时,会将多个配置文件的内容进行合并,具体规则如下:

    基础配置 (application.yml):
        先加载 application.yml,作为全局默认配置。

    环境特定配置 (application-{profile}.yml):
        根据激活的 profile,加载对应的配置文件。
        如果某个配置项在 application-{profile}.yml 中存在,则覆盖 application.yml 中的同名配置项。

    未覆盖的配置项:
        如果某个配置项只存在于 application.yml 中,而未在 application-{profile}.yml 中定义,则保留 application.yml 的值。

6. 总结

    application.yml:
        提供全局默认配置,适用于所有环境。
        优先级较低,容易被环境特定配置覆盖。

    application-prod.yml:
        提供针对生产环境的特定配置。
        优先级较高,会覆盖 application.yml 中的同名配置项。

    加载顺序:
        先加载 application.yml,再根据激活的 profile 加载对应的 application-{profile}.yml。

    推荐实践:
        将通用配置放在 application.yml 中。
        将环境特定的配置放在 application-{profile}.yml 中,避免硬编码敏感信息或环境相关参数。