Spring Boot 两种激活配置方式的作用与区别

Spring Boot 两种激活配置方式的作用与区别

这两种写法都是 Spring Boot 激活配置文件 的核心方式,核心区别是:一个是动态占位符(灵活可变),一个是写死的固定值(静态不变)

先明确基础:Spring Boot 中 spring.profiles.active 的作用是指定当前生效的环境配置 ,比如 dev(开发)、test(测试)、prod(生产),对应加载 application-dev.yml/application-test.yml 等配置文件。


一、两种写法详细解析

1. active: @profiles.active@

java 复制代码
spring:
  profiles:
    active: @profiles.active@

核心作用

这是 Maven/Gradle 构建工具的占位符值不是写死的 ,而是由构建工具动态注入

工作原理

  1. 你在 pom.xml(Maven)或 build.gradle(Gradle)中配置环境参数;
  2. 项目打包 / 启动时,构建工具会把 @profiles.active@ 替换成真实的环境值(dev/test/prod);
  3. 最终运行的配置是动态的,不用修改 YML 文件。

适用场景

多环境统一配置、自动化打包

  • 开发时打包用 dev
  • 测试服务器打包用 test
  • 生产服务器打包用 prod
  • 一套配置文件,通过构建命令切换环境,不用手动改代码

示例(Maven)

pom.xml 中定义配置:

java 复制代码
<profiles>
    <!-- 开发环境 -->
    <profile>
        <id>dev</id>
        <properties>
            <profiles.active>dev</profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!-- 生产环境 -->
    <profile>
        <id>prod</id>
        <properties>
            <profiles.active>prod</profiles.active>
        </properties>
    </profile>
</profiles>

启动 / 打包命令切换环境:

java 复制代码
# 开发环境
mvn spring-boot:run -Pdev
# 生产环境
mvn clean package -Pprod

2. active: dev

XML 复制代码
spring:
  profiles:
    active: dev

核心作用

静态硬编码 :直接把激活的环境固定写死为 dev代码不改,环境永远不变

工作原理

  • 纯 Spring Boot 原生配置,和构建工具无关;
  • 项目启动后,强制只加载 application-dev.yml 配置
  • 想切换环境,必须手动修改 YML 文件。

适用场景

  • 本地单人开发测试
  • 简单小项目,不需要多环境切换
  • 临时调试使用

二、核心区别总结表

表格

维度 active: @profiles.active@ active: dev
类型 动态占位符(Maven/Gradle) 静态固定值
值来源 构建工具动态注入 代码写死
切换方式 命令 / 构建配置切换,无需改代码 手动修改 YML 文件
多环境支持 完美支持(dev/test/prod 一键切换) 不支持(只能用一个环境)
生产环境 推荐使用(标准化、自动化) 禁止使用(容易误上线)
耦合性 配置与代码解耦 配置与代码强耦合

三、关键补充说明

  1. 语法区别

    • @xxx@Maven 专属占位符 (Gradle 用 ${xxx});
    • 纯 Spring Boot 不识别 @xxx@必须配合构建工具使用
  2. 优先级命令行 > 占位符动态注入 > 配置文件写死值

    java 复制代码
    # 命令行参数优先级最高,会覆盖所有配置
    java -jar app.jar --spring.profiles.active=prod
  3. 企业规范 正式项目必须用 @profiles.active@ ,禁止用写死的 dev,避免开发配置上线到生产环境。


总结

  1. @profiles.active@动态、灵活、企业级标准,配合 Maven 实现多环境一键切换;
  2. dev静态、简单、仅适合本地开发,切换环境必须改代码;
  3. 正式项目优先使用动态占位符方案。
相关推荐
青山木几秒前
Hot 100 --- 跳跃游戏 II
java·数据结构·算法·leetcode·贪心算法
ly76893 分钟前
Spring 中的 @Configuration 与 @Component 差异:为何代理时机决定 Bean 生命周期行为
java·后端·spring·注解·代理·bean生命周期
qq_4523962313 分钟前
第十二篇:《数据采集:Grafana Alloy、Fluent Bit、Vector 的选型与配置》
java·贪心算法·grafana
明月_清风14 分钟前
字符串匹配四大经典算法:BF、RK、BM、KMP 到底有什么区别?
后端·算法
卷无止境21 分钟前
测试全绿,功能能跑,代码却烂到没法上线:AI编程助手留下的十个坑
后端·python
珍珠先生23 分钟前
P16 · IDEA 启动报错:找不到或无法加载主类
java
子非鱼a26 分钟前
【WEB】[RoarCTF 2019]Easy Java
java·开发语言
西峰u26 分钟前
电商项目测试报告
java·项目测试报告
lemon_sjdk36 分钟前
各种Binding(1)
java·javafx·绑定·源码解析
李少兄39 分钟前
记一次 IDEA 打开 Vue 项目后目录“闪现即消失“ 问题排查
java·vue.js·intellij-idea