升级后,Java Spring Boot应用不再读取环境变量
我最近把Spring Boot版本从3.x升级到4.x,似乎影响了应用的部署方式。
我正在连接MongoDB,依赖Spring的自动配置根据属性值自动设置数据库连接。我没有使用 @Value,也没有手动创建连接Bean或其他类似的东西。
在本地运行时,应用程序的application.properties会被使用:
spring:
data:
mongodb:
uri: mongodb://mongoroot:devpwd@localhost/datastore?authSource=admin&authMechanism=SCRAM-SHA-1
应用打包成一个jar,并部署在EC2实例上。
我有一个systemd服务单元来启动应用,我曾用它来设置连接信息(我知道这可能不是最优的做法,这只是一个POC/原型系统)。
在服务器上...位于 /etc/systemd/system/myapplication.service.d/env-vars.conf
我尝试过有和没有 "+srv" 的版本,这似乎被作为连接字符串的一个要求添加了。
[Service]
Environment=SPRING_DATA_MONGODB_URI=mongodb+srv://<a user>:<a password>@localhost/datastore
一旦应用尝试查询数据库(我已通过mongosh确认数据库确实存在),就会出现连接错误,似乎使用了来自application.properties文件的用户名值,而不是env-vars-conf中定义的值。
Spring Boot是否改变了属性覆盖的管理方式? 这个设置以前可以正常工作,我没有改动其他任何东西,只是库更新。
解决方案
根据 Spring Boot 4.0迁移指南,MongoDB的属性从 spring.data.mongodb.* 重命名为 spring.mongodb.*。
这意味着 spring.data.mongodb.uri 应该变成 spring.mongodb.uri,环境变量也应改为 SPRING_MONGODB_URI。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。