Spring Boot中Active Profile设置失效问题排查
Spring Boot配置
spring.profiles.active=dev不生效,激活的始终是prod 我在application.properties中配置了spring.profiles.active=dev,但控制台显示激活的配置文件是prod,请求接口也返回prod对应的配置,请问这是为什么?
技术栈
- IDE:Spring Tool Suite 4(版本4.23.0.RELEASE)
- 语言:Java SE 17
相关代码与配置
RestController代码
public class HomeController { @Value("${application.dbms}") String dbmsInUse; @Value("${spring.profiles.active}") String profiles; @GetMapping("/dbms") public void getDbms() { log.info("Profile: {}, DBMS: {}", profiles, dbmsInUse); } }
配置文件
application.properties:
spring.application.name=profile_dbms spring.profiles.active=dev
application-dev.properties:
application.dbms=h2
application-prod.properties:
application.dbms=MariaDB
运行配置
- Spring Boot Profile:无
- 虚拟机参数(VM arguments):无
控制台输出
启动日志:
2024-06-13T10:02:45.540+09:00 INFO 62532 --- [profile_dbms] [ restartedMain] s.bum.profile.ProfileDbmsApplication : The following 1 profile is active: "prod"
请求http://localhost:8080/dbms后的日志:
2024-06-13T10:11:18.903+09:00 INFO 62532 --- [profile_dbms] [nio-8080-exec-1] space.bum.profile.HomeController : Profile: prod, DBMS: MariaDB
排查方案
检查环境变量
Spring Boot会优先读取环境变量SPRING_PROFILES_ACTIVE,确认系统环境变量、IDE的环境变量配置中是否将该值设为了prod。核实启动参数
检查IDE的Program arguments、启动脚本中是否传递了--spring.profiles.active=prod参数,这类参数优先级高于配置文件。确认配置文件优先级
- 检查项目是否存在外部配置目录或更高优先级的配置文件(如
application.yml、打包后外部的配置文件) - 验证
src/main/resources/application.properties是否被正确打包到target目录,查看该文件中的spring.profiles.active值是否为dev
- 清理IDE缓存与构建产物
- 执行Maven/Gradle的
clean和build命令,清理旧构建文件 - 重启STS4并重新加载项目,避免IDE缓存导致的配置未更新
- 检查代码硬编码配置
查看启动类是否添加了@ActiveProfiles("prod")注解,或是否存在自定义的EnvironmentPostProcessor等组件修改了激活的profile。
内容的提问来源于stack exchange,提问作者Park JongBum
相关产品推荐
相关产品推荐

