SpringBoot设置spring.active.profile后无法读取对应环境yml配置文件
问题根因
配置加载失败核心是三个问题:
- Spring Boot默认只会加载classpath根目录下的
application.yml/application.properties作为基础配置,application-dev.yml、application-prod.yml这类带环境后缀的配置属于profile专属配置,只有对应profile被明确激活时才会追加加载,不会自动识别读取。 - 你在IntelliJ里设置的profile仅对IDE本地启动的进程生效,执行
mvn clean install时,maven的构建流程(包括构建阶段自动跑的单元测试)读不到IDE的本地配置,没有显式激活profile的话,根本不会加载对应环境的配置文件,自然报datasource.url找不到的错。 - 你当前pom里的Spring Cloud版本是
Greenwich.SR2,这个版本只适配Spring Boot 2.1.x系列,和你用的Spring Boot 2.7.0版本不兼容,后续大概率出网关、配置绑定的异常问题,建议同步换成适配2.7.x的Spring Cloud版本2021.0.3。
解决方案
不用在pom里硬编码include固定环境文件,按下面三步配置就能动态切环境读配置:
- 在
src/main/resources根目录新建基础配置文件application.yml,这个文件只放全局通用配置和profile激活占位符就行,别放数据库这类环境差异化的配置,内容参考:
这里的spring: profiles: active: @spring.profiles.active@@spring.profiles.active@是maven的资源过滤占位符,构建的时候会自动替换成你传入的环境参数,不用硬写死dev或者prod。 - 在pom.xml的build节点下开启资源过滤,这个配置是通用规则,不会绑定死某个环境,只是用来替换配置文件里的maven占位符,不影响动态切换,配置如下:
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <!-- 你原来配的spring-boot-maven-plugin等插件全部保留,不用改 --> </plugins> </build> - 执行maven构建的时候,通过命令参数动态指定要激活的环境就行,不用改配置文件也不用改IDE设置:
- 打dev环境包执行:
mvn clean install -Dspring.profiles.active=dev - 打prod环境包执行:
mvn clean install -Dspring.profiles.active=prod
- 打dev环境包执行:
注意校验项
配置完确认两个点,避免低级路径/格式问题:
application-dev.yml、application-prod.yml必须和application.yml都放在src/main/resources根目录,别放到resources下的子文件夹里,不然Spring Boot扫不到- 两个环境配置里的数据库配置层级正确,
spring.datasource.url的缩进符合yml语法,不存在格式错误
内容的提问来源于stack exchange,提问作者Rajesh Lohith
相关产品推荐
相关产品推荐

