springboot env 多环境配置入门与实战

Spring Boot3 Env 项目地址

https://gitee.com/supervol/loong-springboot-study

(记得给个start,感谢)

Env 概述

        在 Spring Boot 3 开发中,多环境配置是核心能力之一,其目的是为不同场景(如开发、测试、生产)提供隔离的配置(如数据库连接、端口、日志级别),避免手动修改配置文件的繁琐与风险。Spring Boot 3 遵循 “约定大于配置” 原则,通过标准化的文件命名、灵活的环境激活方式,实现多环境的无缝切换。

Env 核心

        Spring Boot 3 通过配置文件命名规则区分不同环境,核心约定如下:

1. 配置文件类型

        支持两种主流格式(推荐yaml,层级结构更清晰,适合多环境):

  • properties:键值对格式,如application.properties
  • yaml(YAML):层级缩进格式,如application.yaml(推荐)

2. 文件命名规则

所有环境的配置文件需放在项目的src/main/resources目录下,命名遵循:

文件类型主配置文件(全局共享)环境专属配置文件(环境隔离)
propertiesapplication.propertiesapplication-{profile}.properties
yamlapplication.yamlapplication-{profile}.yaml

其中,{profile}环境标识,需自定义且语义化,常见取值:

  • dev:开发环境(本地开发用)
  • test:测试环境(测试人员用)
  • prod:生产环境(线上部署用)
  • uat:预发布环境(上线前验证用)

3. 文件结构示例

src/main/resources/
├─ application.yaml          # 主配置(所有环境共享)
├─ application-dev.yaml      # 开发环境配置
├─ application-test.yaml     # 测试环境配置
└─ application-prod.yaml     # 生产环境配置

Env 示例

        多环境配置的核心是 “主配置共享 + 环境配置覆盖”—— 主配置定义全局通用属性(如应用名称),环境配置定义该环境专属属性(如端口、数据库),同名属性会被环境配置覆盖。

1. 代码位置

        请参考项目地址中 springboot-env/springboot-env-config 模块代码。

2. 激活指定环境

        Spring Boot 3 支持多种激活方式,优先级从高到低如下(高优先级覆盖低优先级):

激活方式具体用法适用场景
命令行参数(最高)启动 Jar 时指定:
java -jar demo-app.jar --spring.profiles.active=prod
部署时动态指定环境(推荐)
JVM 参数启动时通过-D指定:
java -Dspring.profiles.active=test -jar demo-app.jar
测试环境调试
系统环境变量配置系统变量:
SPRING_PROFILES_ACTIVE=prod(Windows/Linux 通用)
服务器全局环境配置
主配置文件(最低)application.yaml中配置:
spring.profiles.active=dev
本地开发默认环境

Env 进阶

        除了基础的 “一环境一文件”,Spring Boot 3 还支持更灵活的配置组织方式,满足复杂场景需求。

1. 激活多个环境

        可同时激活多个环境,实现 “基础配置 + 功能配置” 的拆分(如日志配置、数据库配置拆分)。规则:后面激活的环境会覆盖前面的同名属性。拆分日志配置:

  1. 创建通用日志配置文件:application-log.yaml
    logging:pattern:console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
    
  2. 激活devlog环境(命令行方式):

    bash

    java -jar demo-app.jar --spring.profiles.active=dev,log
    

    此时加载顺序:application.yaml → application-dev.yaml → application-log.yamllog的配置会覆盖前两者的同名日志属性。

2. Profile 分组

        当环境依赖多个子配置(如prod依赖 “数据库配置 + 缓存配置 + 日志配置”),可通过Profile 分组简化激活操作。分组生产环境:

        在主配置application.yaml中定义分组:

spring:profiles:# 定义prod分组:激活prod时,自动加载prod、prod-db、prod-redisgroup:prod: prod, prod-db, prod-redistest: test, test-db  # 测试环境分组

创建子配置文件:

  • application-prod-db.yaml(生产数据库)
  • application-prod-redis.yaml(生产缓存)

激活分组(只需指定分组名prod):

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

3. 外部配置文件

        生产环境中,配置文件通常不打包进 Jar,而是放在外部目录(方便修改)。Spring Boot 3 会自动扫描以下外部路径(优先级从高到低):

  1. 项目根目录下的config/文件夹
  2. 项目根目录
  3. classpath:/config/(resources/config)
  4. classpath:/(resources,默认)

        外部配置生产环境,将application-prod.yaml放在服务器的/opt/app/config/目录下,启动 Jar 时指定外部配置路径:

java -jar demo-app.jar --spring.profiles.active=prod --spring.config.location=/opt/app/config/

Env 实践

        在分布式系统中,本地多环境配置无法满足 “动态更新配置”“统一管理配置” 的需求,通常会结合配置中心(如 Nacos、Spring Cloud Config)使用:

  1. 配置中心存储:将dev/test/prod环境的配置存储到配置中心,按环境分组。
  2. 应用动态拉取:Spring Boot 应用启动时,通过配置中心的地址和环境标识(如spring.cloud.nacos.config.profile=prod),动态拉取对应环境的配置。
  3. 配置动态更新:配置中心修改配置后,应用无需重启即可实时感知更新(需开启配置刷新机制)。

Env 注意

  1. 配置覆盖优先级:命令行参数 > 系统环境变量 > JVM 参数 > 外部配置文件 > 内部配置文件。
  2. 避免硬编码敏感信息:生产环境的密码、密钥等,不要写在配置文件中,应通过环境变量(如${DB_PASSWORD})或配置中心加密存储获取。
  3. YAML 格式缩进问题:YAML 依赖缩进(2 个空格,不支持 Tab),缩进错误会导致配置加载失败,需注意格式校验。
  4. 多环境激活顺序:同时激活多个环境时(如dev,log),后面的环境会覆盖前面的同名属性,需合理安排顺序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96451.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用conda打包/复刻生信环境

01、写在前面 大家拿到自己的服务器(趁开学| 入手足够完成硕博生涯的生信环境)后可能需要安装很多的软件与包,Linux中许多包的安装依赖过多、安装复杂。而conda作为一个能够直接安装超过90%软件的"管家",能够像Windows和手机中的应用商店那样…

数据分析:合并

🔷 DA37:统计运动会项目报名人数(仅输出有人报名的项目)✅ 题目描述给定两个 CSV 文件:items.csv:包含项目信息(item_id, item_name, location)signup.csv:包含员工报名信…

高并发内存池(一):项目介绍和ThreadCache(线程缓存)实现

前言:本文将要介绍的高并发内存池,它的原型是Google的⼀个开源项⽬tcmalloc,全称Thread-Caching Malloc,近一个月我将以学习为目的来模拟实现一个精简版的高并发内存池,并对核心技术分块进行精细剖析,分享在…

RK3399平台ffmpeg-VPU硬编码录制USB摄像头视频、H264或MJPEG编码

文章目录 1 前言2 项目内容详细说明2.0 功能2.1 工程文件夹说明 3 代码3.1 CameraThread类3.1 CameraThreadImpl类 4 资源下载 1 前言 在某项目中需要在RK3399平台实现USB摄像头画面的实时预览、视频录制、拍照存储等功能。   先来看需要实现的最终效果。    ffmpeg USB摄…

解决蓝牙耳机连win11电脑画质依托答辩问题

以wh910n蓝牙耳机为例 设置-系统-声音-输出(耳机)-常规(输出点不允许)然后删除wh910n蓝牙设备 重新配对蓝牙耳机

独立显卡和集成显卡切换电脑卡住了怎么办?

你是不是也遇到过这种情况——正忙着切换显卡呢,电脑突然就卡住了,鼠标不动、屏幕定格,怎么按都没反应?其实这种问题挺常见的,尤其是用了双显卡的笔记本或者工作站。别急着强制关机,嗯,咱们一步…

Java根据模版导出PDF文件

问题 工作中经常有这样的需求,将一些数据,导出为下图的PDF文件,那Java怎么做呢?今天手把手教你 准备模版 模版地址:https://download.csdn.net/download/ZHUSHANGLIN/91923381 修改模版使用AcrobatProPortable工具…

力扣hot100:环形链表(快慢指针法)(141)

一、题目描述二、思路分析这是链表题目中的经典问题,核心就是 如何判断链表是否有环。 常见的两种方法有:哈希表法:用一个集合存储访问过的节点,如果再次遇到相同节点说明有环。缺点:需要额外的空间,空间复…

AI 智能编码工具:重塑开发效率的革命,从 GitHub Copilot 到国产新秀的全面解析

目录 引言 一、主流智能编码工具深度测评:从功能到实战 1. GitHub Copilot:AI 编码的 “开山鼻祖” 核心特性与实战代码 优缺点总结 2. Baidu Comate:文心大模型加持的 “国产之光” 核心特性与实战代码 优缺点总结 3. 通义灵码&…

Server 13 ,CentOS 上使用 Nginx 部署多个前端项目完整指南( 支持多端口与脚本自动化 )

目录 前言 一、实际背景 1.1 并行部署 1.2 接口代理 1.3 刷新问题 二、安装脚本 2.1 创建脚本 2.2 不同系统 2.3 执行完成 三、配置文件 3.1 配置文件 3.2 目录结构 3.3 重新启动 四、验证访问 五、问题排查 5.1 访问 404 5.2 接口 502 六、本文总结 6.1 清理…

2025最新:彻底解决Docker拉取镜像超时问题

文章目录🐳 解决 Docker 拉取镜像超时:context deadline exceeded 完整指南(2025 亲测有效)🔥 问题描述🧩 根本原因分析✅ 解决方案汇总✅ 方案 1:配置多源镜像加速器(推荐&#xff…

小鹏汽车 vla 算法最新进展和模型结构细节

小鹏汽车在 VLA(视觉 - 语言 - 动作)算法领域的最新进展和模型结构细节,体现了其在端到端智驾系统和车端大模型部署上的技术突破。以下是基于 2025 年 9 月最新公开信息的深度解析: 一、最新进展:全场景 VLA 系统量产落…

斐波那契数列推广

目录 问题: 法一: 法二: 例题: 问题: 已知斐波那契数列的第一个和最后一个数字,如何求整个数列(即第二个数字) 法一: 主要是将数列拆分成两个数列的思想 法二: 暴力…

基于STM32设计的智慧路灯(华为云IOT)_281

文章目录 一、前言 1.1 项目介绍 【1】项目开发背景 【2】设计实现的功能 【3】项目硬件模块组成 【4】设计意义 【5】国内外研究现状 【6】摘要 1.2 设计思路 1.3 系统功能总结 1.4 开发工具的选择 【1】设备端开发 【2】上位机开发 1.5 参考文献 1.6 系统框架图 1.7 系统原理…

实验十 合理定义分布列实现性能优化-分布式表关联

实验介绍本实验通过分析普通查询过程中存在的性能瓶颈点,通过执行计划的分析找到可能的性能优化点并加以实施,最终达到优化的效果,重点关注分布式关联相关查询语句的优化。实验目的了解通过合理定义分布列实现分布式关联的性能优化。实验步骤…

C#,RabbitMQ从入门到精通,.NET8.0(路由/分布式/主题/消费重复问题 /延迟队列和死信队列/消息持久化 )/RabbitMQ集群模式

为什么使用消息队列 消息队列(MQ)在分布式系统中用于解耦生产者和消费者,提高系统的异步处理能力、削峰填谷、增强可扩展性和可靠性。通过消息队列,任务可以异步执行,避免系统因瞬时高并发而崩溃。 消息队列场景 异…

OpenHarmony之SELinux安全组件底层原理设计架构精讲

1. 组件介绍 1.1 核心功能 **SELinux(安全增强式Linux)**是Linux历史上杰出的安全组件,包含一组内核修改和用户空间工具,并提供了基于安全策略的强制访问控制机制(Mandatory Access Control,MAC)。本部件负责对文件、属性、服务等系统资源提供强制访问控制保护,提供n…

IIS 部署 asp.net core 项目时,出现500.19、500.31问题的解决方案

目录 (一)500.19 问题 1. 问题说明 2. 原因 3. 解决 (二)500.31 问题 1. 问题说明 2. 原因 打开事件检视器的3种方式: 3. 解决 (一)500.19 问题 1. 问题说明 2. 原因 Web项目发布时&am…

中大型水闸安全监测的重要性及实施方法

水闸作为水利工程体系中的关键性构筑物,其结构安全性和运行可靠性直接影响到整个水利系统的稳定运行,更与下游地区人民群众的生命财产安全息息相关。作为水利枢纽工程的重要控制节点,水闸承担着防洪排涝、灌溉供水、航运发电等多重功能&#…

【芯片设计-信号完整性 SI 学习 1.1.1 -- Unit Interval,比特周期】

文章目录1. Unit Interval (UI) / 比特周期 的定义2. 举例说明3. 在眼图 (Eye Diagram) 中的体现4. 示意图(a) 单比特周期(b) 不同速率下的 UI(c) 眼图中的 UI5. 总结1. Unit Interval (UI) / 比特周期 的定义 在高速信号传输与 信号完整性 (SI) 测试中,Unit Inter…