news 2026/8/13 6:08:14

Spring-Profile与部署说明

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring-Profile与部署说明

Spring Profile 与部署说明

本文档说明Spring Boot 激活环境(profile)的生效方式、优先级,以及Docker Compose 部署时环境变量的传递机制。


一、spring.profiles.active的优先级(从高到低)

Spring Boot 确定「当前激活的 profile」时,按以下顺序取第一个有值的来源

优先级来源说明
1(最高)程序参数运行配置中的--spring.profiles.active=xxx,或 IDE 的Active profiles(会转成程序参数)
2JVM 参数VM options 中的-Dspring.profiles.active=xxx
3环境变量操作系统/进程环境变量SPRING_PROFILES_ACTIVE=xxx(如 Docker Compose 的environment
4配置文件application.properties/application.yml中的spring.profiles.active=xxx
5(最低)未设置以上都未配置时,无激活 profile 或按框架约定视为 default

同一种来源内,先被读取到的生效;高优先级会覆盖低优先级。


二、指定激活环境的几种方式

方式典型场景
1. IDE 运行配置在 Run Configuration 的Active profilesdev/test/prod,或 Program arguments 填--spring.profiles.active=dev
2. VM options运行配置中 VM options 填-Dspring.profiles.active=dev
3. 环境变量系统或容器环境变量SPRING_PROFILES_ACTIVE=dev(Docker Compose 即此类)
4. 配置文件application.propertiesapplication.yml中写spring.profiles.active=dev
5. Maven + 插件使用 Maven 运行配置执行spring-boot:run,由 POM 中<arguments>--spring.profiles.active=${application.environment}</arguments>传入,此时 Maven 勾选的 profile 会生效

三、IDE 直接运行 vs Maven 运行

  • 直接点运行主类(Spring Boot / Application 运行配置):
    不会执行 Maven,因此不会使用 Maven 的 profile 或 POM 里spring-boot-maven-plugin<arguments>
    激活环境由运行配置里的 Active profiles / Program arguments或上面优先级表中的 2~5 决定。

  • 用 Maven 运行配置(执行spring-boot:run):
    会执行 Maven,使用当前勾选的 Maven profile 和 POM 中的
    <arguments>--spring.profiles.active=${application.environment}</arguments>
    即「勾选 Maven 的 profile → 点运行」即可切换 Spring 的激活环境。


四、Docker Compose 中SPRING_PROFILES_ACTIVE如何传递

4.1 在优先级中的位置

Docker Compose 的environment会变成容器内的环境变量,对应上表中的优先级 3
若未在启动命令中传入程序参数或 JVM 参数,则会使用这里的SPRING_PROFILES_ACTIVE

示例:

your-app:image:your-app:latestenvironment:SPRING_PROFILES_ACTIVE:testSPRING_CLOUD_NACOS_SERVER_ADDR:nacos:8848

4.2 传递链路

docker-compose 的 environment ↓ 容器进程的环境变量(如 export SPRING_PROFILES_ACTIVE=test) ↓ 容器内启动的 Java 进程(如 java -jar app.jar)继承该环境 ↓ Spring Boot 启动时按「宽松绑定」规则读取环境变量 ↓ SPRING_PROFILES_ACTIVE → 映射为 spring.profiles.active → 激活对应 profile(如 test)
  • 宽松绑定:环境变量大写+下划线(SPRING_PROFILES_ACTIVE)自动对应配置项小写+点号(spring.profiles.active),无需在代码中手写读取逻辑。

五、Docker Compose 部署需要哪些文件

文件是否必须作用
docker-compose 文件必须定义服务如何运行:镜像、端口、环境变量、依赖服务(如配置中心、数据库)等;执行docker compose up时使用。
Dockerfile必须(若自建镜像)定义如何将应用打成镜像(如 JDK、jar、启动命令);image: your-app:latest需通过 Dockerfile 构建或从仓库拉取。
Jenkinsfile非必须用于 Jenkins CI/CD 流水线(编译、构建镜像、推送、部署);仅在使用 Jenkins 做自动化时需要,与「能否用 docker compose 启动」无直接关系。

结论:仅就「用 Docker Compose 启动应用」而言,需要Dockerfile + docker-compose 文件;Jenkinsfile 仅在采用 Jenkins 做流水线时才需要。


六、常见配置文件约定

  • bootstrap.properties/application.properties:公共配置(如配置中心、注册中心地址等)。
  • bootstrap-{profile}.properties/application-{profile}.properties:按 profile 区分的环境配置,例如:
    • bootstrap-dev.properties(本地开发)
    • bootstrap-test.properties(测试)
    • bootstrap-prod.properties(生产)

激活的 profile 决定加载哪一个*-{profile}.properties

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/13 6:07:57

MySQL 中 MVCC 和锁的关系与配合

MySQL 中 MVCC 和锁的关系与配合 MySQL 的 InnoDB 存储引擎通过 MVCC&#xff08;多版本并发控制&#xff09; 和 锁机制 来处理并发事务。这两者并非各自为政&#xff0c;而是紧密协作、分工明确&#xff1a; MVCC 主要负责读操作&#xff08;尤其是普通查询&#xff09;&…

作者头像 李华
网站建设 2026/7/14 15:48:19

【Iced】span.rs 文件分析

// span.rs 文件分析 use crate::core::window;use serde::{Deserialize, Serialize};/// 性能追踪的跨度&#xff08;Span&#xff09;枚举 /// 定义了应用程序中可以被追踪的不同阶段 #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum Span {/// 启动…

作者头像 李华
网站建设 2026/7/14 15:48:19

OpenClaw 中的 Skills 机制与复现

摘要&#xff1a;OpenClaw 通过 Skills 与 ClawHub 扩展智能体能力&#xff0c;技能以「目录 SKILL.md / manifest.json」形式存放在工作区 skills/ 下&#xff0c;并在 openclaw.json 中注册&#xff1b;安装/更新/移除技能时会同步更新 SKILLS.md&#xff0c;使智能体在下一…

作者头像 李华
网站建设 2026/7/14 15:48:33

ADS原理图VIAGND直接生成版图未成功过孔

原理图直接生成版图&#xff1a;生成版图后设置仅显示used layer&#xff0c;发现只有cond层&#xff0c;而无过孔层&#xff08;过孔层可以为hole&#xff0c;也可以为cond_cond2&#xff09;同时查看3D模型&#xff0c;发现也没有过孔&#xff1a;解决办法&#xff1a;回到原…

作者头像 李华
网站建设 2026/7/14 15:48:32

Claude Code 费用与中转api

Claude Code 值不值得用?我最近的一点体验和整理 这段时间我一直在看 Claude Code。原因很简单:它不是那种“在网页里陪你聊天”的 AI 工具,而是真正开始往开发环境里走了。它可以直接工作在终端里,也能接进 VS Code、JetBrains、Slack 和网页端;你描述需求,它去理解代码…

作者头像 李华