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

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

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

1. 配置文件命名规范

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

配置文件类型 命名格式 作用
主配置文件(必选) application.properties / application.yml 存放所有环境的公共配置
环境专属配置文件 application-{profile}.properties / application-{profile}.yml 存放指定环境的专属配置(如 application-dev.yml、application-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.yml:server.port=8080
  • ./config/application.yml:server.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. 核心原则:后加载的配置会覆盖先加载的同名配置。
相关推荐
云和数据.ChenGuang12 小时前
JAVAEE AI工程师路线图
java·人工智能·java-ee·fastapi·springai·langchain4j
2601_9628857212 小时前
如何用 Python 统计 A 股连续涨停(几连板)?
java·linux·python
大圣编蚕13 小时前
Spring AOP 失效排查:从原理到实战的完整指南
java·后端·spring
AINative软件工程13 小时前
LLM 多租户 Prompt Isolation 工程实践:为 100 个租户定制 Prompt,但别让它们互相污染
后端·llm
EatFan13 小时前
MCP 从概念到落地:Java(Spring AI Alibaba)与 .NET 双栈接入实操对比
java·人工智能·后端·spring·.net·java后端·mcp
专业程序开发源13 小时前
springboot全民健身和饮食健康管理系统29158-计算机课程设计、毕业设计
java·spring boot·后端·python·django·php·课程设计
ym hyd 11113 小时前
汽车零部件缺陷管理系统源码 Java+SpringBoot+Vue3 前后分离
java·vue.js·spring boot·汽车·毕设
Wang's Blog13 小时前
Java框架 SpringCloud 快速入门: 从服务拆分到注册中心的落地路线
java·开发语言·spring cloud
梦帮科技14 小时前
【3.0修订版】 RNS 代币架构:ERC20 五件套扩展与六钱包分配
数据结构·后端·算法·架构·node.js·区块链·php
Wang's Blog14 小时前
Java框架 SpringCloud 快速入门: 全局过滤器(GlobalFilter)自定义鉴权
java·开发语言·spring cloud