Spring Boot 用 Profiles 管理数据库连接的核心是配置驱动:通过 application-{profile}.yml 分离环境配置,application.yml 仅保留公共项,启动时通过 spring.profiles.active 激活对应环境,支持多 profile 组合与覆盖规则,并避免硬编码、多文档块及敏感信息明文存储。

在 Spring Boot 中用 Profiles 管理不同数据库连接,核心是把“环境差异”从代码里抽出来,靠配置驱动,而不是改代码或手动替换连接串。关键不在于多写几个数据源类,而在于让同一套代码,在 dev 时连本地 MySQL,test 时连测试库,prod 时自动切到高可用 PostgreSQL —— 启动时只换一个开关就行。
用 application-{profile}.yml 分离配置
这是最常用也最推荐的方式。把各环境的数据库配置拆到独立文件中,Spring Boot 会自动识别并加载:
- application-dev.yml:开发环境用 H2 或本地 MySQL
- application-test.yml:指向测试服务器上的 MySQL 实例
- application-prod.yml:配置生产环境的主从地址、连接池参数、SSL 等
所有文件都放在 src/main/resources/ 下,主配置 application.yml 只保留公共项(如日志格式、通用 Bean 设置),不写任何数据库地址。
激活 Profile 控制加载哪一份
启动时指定当前环境,Spring Boot 就只加载对应文件:
立即学习“Java免费学习笔记(深入)”;
- 在
application.yml里写:spring.profiles.active: dev - 命令行启动:
java -jar app.jar --spring.profiles.active=prod - Docker 环境变量:
-e SPRING_PROFILES_ACTIVE=prod
注意:如果同时激活多个 profile(如 dev,h2),application-h2.yml 也会被加载,且后加载的配置项会覆盖前面同名项(比如两个文件都配了 spring.datasource.url,application-h2.yml 的值生效)。
支持多数据源时按 profile 绑定
项目要连两个库(比如业务库 + 统计库),可以用 profile 进一步区分组合:
- 定义
application-dev-primary.yml和application-dev-report.yml - 启动时设
--spring.profiles.active=dev,primary,report - 在
@Configuration类上加@Profile({"dev", "primary"}),确保只有 dev+primary 同时激活时才创建主数据源 Bean
这样既能复用配置片段,又避免 dev 环境误加载 prod 的统计库连接信息。
避免踩坑的关键细节
实际部署中最容易出问题的地方:
- 别在
application.properties里硬编码数据库地址 —— 即使写了spring.profiles.active,根文件里的连接串仍会生效,可能覆盖 profile 文件里的设置 - YAML 中用
---写多文档块虽可行,但可读性差、易出缩进错误,不建议用于生产项目 - 敏感信息(密码、密钥)不要直接写在 profile 文件里,应结合 Spring Cloud Config 或环境变量注入
- 检查配置是否真被加载:启动日志里搜
Active profiles和Loaded config file,确认路径和内容匹配预期


















