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

推荐订阅源

人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
量子位
GbyAI
GbyAI
腾讯CDC
T
Tailwind CSS Blog
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
D
Docker
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
Jina AI
Jina AI
IT之家
IT之家
Y
Y Combinator Blog

博客园 - 哈喽哈喽111111

Rocky 9.6安装配置Google Authenticator AI 不仅没有减少工作,反而增加了工作 你需要知道的 AI 内存知识 firewall-cmd使用教程 minio从旧集群导出桶再上传到新集群导入桶 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 中,避免硬编码敏感信息或环境相关参数。