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. 核心原则:后加载的配置会覆盖先加载的同名配置。
相关推荐
武子康9 小时前
大数据-238 离线数仓 - 广告业务 Hive分析实战:ADS 点击率、购买率与 Top100 排名避坑
大数据·后端·apache hive
Seven9710 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
Victor35610 小时前
MongoDB(23) 如何使用条件查询文档?
后端
摸鱼的春哥10 小时前
Agent教程15:认识LangChain,Agent框架的王(上)
前端·javascript·后端
Victor35610 小时前
MongoDB(22)如何批量插入文档?
后端
追逐时光者17 小时前
一款使用 C# 编写专为 Windows 11 打造的文件资源管理器增强工具!
后端·.net
风象南18 小时前
普通人用AI加持赚到的第一个100块
人工智能·后端
皮皮林55119 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河19 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化