Spring Boot多Profile YML配置异常:激活prod却加载dev的Mongo URI
问题分析与解决方案
从你的日志和配置文件来看,核心问题是application.yml的YAML格式错误——虽然日志显示prod Profile已成功激活,但因为配置的层级结构写错了,导致prod环境的MongoDB配置根本没被Spring Boot正确读取,最终 fallback 使用了dev环境的配置。
错误配置的核心问题
你原配置里的每个Profile块都犯了同一个错误:把spring: profiles: xxx和对应的数据库配置拆成了两个独立的顶级spring节点,而不是将数据库配置嵌套在当前Profile的spring节点下。YAML是严格依赖缩进和层级关系的,这种写法会让Spring Boot无法识别数据库配置属于哪个Profile,最终导致prod的配置失效。
你原来的错误配置:
spring: profiles: prod spring: data: mongodb: uri: ${MONGODB_URI} --- spring: profiles: dev spring: data: mongodb: uri: mongodb://admin:password@localhost:27017/mobsters
修正后的正确配置
把每个Profile的所有配置都放在同一个spring节点下,保持正确的缩进层级:
spring: profiles: prod data: mongodb: uri: ${MONGODB_URI} --- spring: profiles: dev data: mongodb: uri: mongodb://admin:password@localhost:27017/mobsters
这样修改后,当激活prod Profile时,Spring Boot会正确读取该块下的spring.data.mongodb.uri配置,不会再读取dev块的内容。
额外验证建议
- 启动应用时添加
--debug参数,查看配置加载的详细日志,确认prod环境的MongoDB URI是否被正确加载; - 检查环境变量
MONGODB_URI是否已正确设置,避免出现配置加载后变量为空的连接问题。
内容的提问来源于stack exchange,提问作者Adrian Elder
相关产品推荐
相关产品推荐

