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. 核心原则:后加载的配置会覆盖先加载的同名配置。
相关推荐
小北方城市网2 小时前
Spring Cloud Gateway 全链路监控与故障自愈实战
spring boot·python·rabbitmq·java-rabbitmq·数据库架构
小北方城市网2 小时前
Spring Cloud Gateway 动态路由进阶:基于 Nacos 配置中心的热更新与版本管理
java·前端·javascript·网络·spring boot·后端·spring
橙露2 小时前
Docker 容器化运维:镜像优化、容器编排与持久化存储方案
java·运维·docker
码农阿豪2 小时前
SpringAI 实战:构建智能问答系统全流程解析
java·人工智能
a努力。2 小时前
Spring Boot 4 全面拥抱 Jackson 3
java·运维·开发语言·spring boot·后端·spring·jenkins
那我掉的头发算什么2 小时前
【Spring】从0到1掌握Spring MVC应用分层
java·后端·spring·mvc
打工的小王2 小时前
Spring Boot(二)模版引擎
java·spring boot·后端
茶本无香2 小时前
设计模式之七—装饰模式(Decorator Pattern)
java·设计模式·装饰器模式
rannn_1112 小时前
【Javaweb学习|Day11】SpringBoot原理|配置优先级、Bean的管理、原理及源码分析
java·spring boot·后端·学习·javaweb