Spring Boot连接MongoDB Atlas遇SRV主机名错误,求解决方案
错误信息
Caused by: java.lang.IllegalArgumentException: An SRV host name '${env.MONGO_CLUSTER}' was provided that does not contain at least three parts. It must contain a hostname, domain name and a top level domain.
我的配置
application.properties
spring.application.name=movies spring.data.mongodb.database=${env.MONGO_DATABASE} spring.data.mongodb.uri=mongodb+srv://${env.MONGO_USER}:${env.MONGO_PASSWORD}@${env.MONGO_CLUSTER}
.env文件
MONGO_USER=myUsername MONGO_PASSWORD=Otek15767%2AGIRL2 MONGO_DATABASE=moviesdb MONGO_CLUSTER=cluster0.mongodb.net
pom.xml依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>me.paulschwarz</groupId> <artifactId>spring-dotenv</artifactId> <version>4.0.0</version> </dependency> </dependencies>
已尝试的操作
- 验证连接串:从MongoDB Atlas复制连接串,替换为环境变量占位符
- 编码特殊字符:将密码中的*编码为%2A
- 验证环境变量:确认MONGO_CLUSTER设置为cluster0.mongodb.net
- 重启应用:确保应用加载最新的.env配置
解决方案
修正环境变量占位符格式
spring-dotenv默认识别${VAR_NAME}格式的占位符,而非${env.VAR_NAME}。修改application.properties中的变量引用:spring.data.mongodb.database=${MONGO_DATABASE} spring.data.mongodb.uri=mongodb+srv://${MONGO_USER}:${MONGO_PASSWORD}@${MONGO_CLUSTER}原错误显示
${env.MONGO_CLUSTER}未被替换,说明该占位符格式不被spring-dotenv识别。确认.env文件位置
确保.env文件放在项目根目录(与pom.xml同级),多模块项目需放在启动模块的根目录下,spring-dotenv默认从根目录加载该文件。验证连接串完整性
替换变量后,最终连接串应为mongodb+srv://myUsername:Otek15767%2AGIRL2@cluster0.mongodb.net/moviesdb,可手动拼接后在MongoDB Atlas的连接测试工具中验证有效性。检查版本兼容性
spring-dotenv 4.0.0适配Spring Boot 3.x,若你的Spring Boot为2.x版本,需降级spring-dotenv至2.x系列(如2.5.4),避免版本不兼容导致变量加载失败。
内容的提问来源于stack exchange,提问作者Monicah Odipo

