Spring Boot 配置文件核心用法与加载优先级

一、多配置文件的核心用法

Spring Boot 采用「主配置文件 + 环境专属配置文件」的模式管理多环境配置,核心规则如下:

1. 配置文件命名规范

Spring Boot 默认识别 .properties / .yml/.yaml 两种格式,命名需遵循以下规则:

配置文件类型 命名格式 作用
主配置文件(必选) application.properties / application.yml 存放所有环境的公共配置
环境专属配置文件 application-{profile}.properties / application-{profile}.yml 存放指定环境的专属配置(如 application-dev.ymlapplication-prod.yml

2. 激活指定配置文件

支持 3 种激活方式,优先级从低到高排列:

方式 1:主配置文件中指定(最常用)

application.yml 中通过 spring.profiles.active 激活,可指定多个环境(逗号分隔):

yaml

复制代码
# application.yml(主配置文件)
# 公共配置(所有环境生效)
server:
  port: 8080
# 激活 dev 环境(可多环境:dev,test)
spring:
  profiles:
    active: dev

示例环境配置文件:

yaml

复制代码
# application-dev.yml(开发环境)
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/dev_db
    username: root
    password: 123456
logging:
  level:
    root: debug  # 开发环境日志级别

yaml

复制代码
# application-prod.yml(生产环境)
spring:
  datasource:
    url: jdbc:mysql://192.168.1.100:3306/prod_db
    username: prod_user
    password: prod_123456
logging:
  level:
    root: info  # 生产环境日志级别
server:
  port: 80  # 生产环境端口
方式 2:命令行参数指定(优先级更高)

打包为 jar 后,启动时通过 -- 参数覆盖:

bash

运行

复制代码
java -jar your-project.jar --spring.profiles.active=prod
方式 3:系统环境变量指定

设置系统环境变量 SPRING_PROFILES_ACTIVE=test,Spring Boot 自动识别并激活 test 环境。

3. 进阶用法:多环境合并与分组

若配置按功能拆分(如数据库、Redis),可通过 spring.profiles.include 合并:

yaml

复制代码
# application-dev.yml
spring:
  profiles:
    include:
      - db-dev  # 合并数据库配置(application-db-dev.yml)
      - redis-dev  # 合并Redis配置(application-redis-dev.yml)

4. 实战目录结构

plaintext

复制代码
src/main/resources/
├── application.yml          # 主配置(激活环境)
├── application-dev.yml      # 开发环境核心配置
├── application-prod.yml     # 生产环境核心配置
├── application-db-dev.yml   # 开发环境数据库配置
└── application-db-prod.yml  # 生产环境数据库配置

二、外部配置加载的核心规则

Spring Boot 加载配置遵循「后加载者优先」原则(后面的配置覆盖前面的),以下按优先级从低到高梳理:

1. 配置加载优先级(核心)

优先级 加载位置 说明
1(最低) classpath:/ 项目内部 src/main/resources 目录(默认位置)
2 classpath:/config/ 项目内部 src/main/resources/config 目录
3 ./ 应用运行目录(jar 包所在目录)
4 ./config/ 应用运行目录下的 config 文件夹(生产环境最常用)
5 ./config/*/ 应用运行目录下 config 文件夹的子文件夹(按字母序加载)
6 Java 系统属性(-D 参数) java -Dserver.port=8089 -jar app.jar
7 操作系统环境变量 SPRING_PROFILES_ACTIVE=prod(大写 + 下划线命名)
8 命令行参数(-- 参数) java -jar app.jar --server.port=8083
9 激活的 profile 配置文件 如 application-prod.yml 覆盖 application.yml
10(最高) 远程配置中心(Nacos/Apollo 等) 覆盖所有本地配置

2. 实战验证示例

假设存在以下配置:

  • classpath:application.ymlserver.port=8080
  • ./config/application.ymlserver.port=8081
  • 启动命令:java -Dserver.port=8082 --server.port=8083 -jar your-app.jar

最终生效端口为 8083,优先级顺序:命令行参数 > Java 系统属性 > 外部 config 配置 > 内部配置。

3. 实用技巧

  1. 生产环境:核心配置(数据库密码、端口)放在 ./config/application.yml,无需修改 jar 包即可调整;
  2. 临时调试:通过命令行参数快速切换环境,如 --spring.profiles.active=test
  3. 避免冲突:远程配置中心只放核心业务配置,本地保留基础配置便于排查问题。

总结

多配置文件核心
  1. 命名规范:遵循 application-{profile}.yml/properties,主配置存放公共配置;
  2. 激活方式:主配置文件指定为默认方式,命令行 / 环境变量可覆盖;
  3. 合并用法:通过 spring.profiles.include 拆分功能型配置文件。
配置加载核心
  1. 优先级规则:外部配置 > 内部配置,命令行 / 系统属性 > 环境变量 > 配置文件,远程配置 > 本地配置;
  2. 生产常用:./config/ 目录优先级高于项目内部 config,无需打包即可调整配置;
  3. 核心原则:后加载的配置会覆盖先加载的同名配置。
相关推荐
大模型码小白10 小时前
企业级检索增强后端集成:Java 服务如何管理知识库版本
java·服务器·开发语言·人工智能·python·microsoft
geovindu10 小时前
go:Backtracking Algorithm
开发语言·后端·算法·golang·回溯算法
AI多Agent协作实战派10 小时前
AI多Agent协作系统实战(二十二):从6列到12列——任务监控报告的进化之路
java·人工智能·uni-app·bug
千桐科技11 小时前
DataX 执行引擎正式加入:qData 开源版 v1.6.0 新增 Quartz + DataX 轻量运行模式!
java·大数据·开源·数据治理·数据中台·qdata
ZDQNFU11 小时前
ORM之SQLAlchemy教程
后端·python
Assby11 小时前
为什么我不建议你在 MySQL 里写 `IN (超过1000个ID)`?从 AST 解析到存储引擎的深度拆解
后端·面试
用户409666013175111 小时前
从 MyBatis 到 JPA:一个 CRUD 程序员的认知重建
后端
Irene199111 小时前
Oracle PL/SQL Developer 版本差异(11g、14)实战总结
java·开发语言
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题 第191题】【08_Kafka篇】第7题:消息队列的优缺点
java·消息队列·系统设计·分布式架构·技术选型
用户4461394302711 小时前
Spring Boot 接入大模型:从配置到实战的完整指南
java