Spring Boot配置MongoDB使用.env文件时SRV主机名报错
解决Spring Boot + MongoDB环境变量加载的SRV解析错误
问题根源
你的.env文件中变量值被单引号包裹,这会导致spring-dotenv加载时把单引号也当作变量值的一部分,从而引发后续的MongoDB SRV解析错误。
解决方案步骤
1. 修正.env文件格式
去掉所有变量值的单引号,修改后的.env内容:
MONGO_DATABASE=movies-api-db MONGO_USER=LoKi MONGO_PASSWORD=**************** MONGO_CLUSTER=cluster0.bubp9pu.mongodb.net
2. 调整application.properties配置
确保URI拼接完全符合MongoDB SRV格式,建议加上数据库名和标准参数,和Atlas提供的默认URI对齐:
spring.data.mongodb.database=${env.MONGO_DATABASE} spring.data.mongodb.uri=mongodb+srv://${env.MONGO_USER}:${env.MONGO_PASSWORD}@${env.MONGO_CLUSTER}/${env.MONGO_DATABASE}?retryWrites=true&w=majority
3. 验证环境变量加载正确性
可以在启动类中添加代码打印加载的变量,确认没有多余字符:
import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MovieApiApplication implements CommandLineRunner { @Value("${env.MONGO_CLUSTER}") private String mongoCluster; public static void main(String[] args) { SpringApplication.run(MovieApiApplication.class, args); } @Override public void run(String... args) throws Exception { System.out.println("Loaded MONGO_CLUSTER: " + mongoCluster); // 正常输出应为 cluster0.bubp9pu.mongodb.net,无单引号 } }
4. 清理缓存并重启应用
执行mvn clean install清理项目缓存,然后重启Spring Boot应用。
错误原因详解
- 初始错误
An SRV host name '${env.MONGO_CLUSTER}' was provided...:单引号导致变量未被正确替换,Spring直接把${env.MONGO_CLUSTER}当作主机名,不符合SRV格式要求。 - 后续DNS解析错误:变量被替换后仍带有单引号(如
'cluster0.bubp9pu.mongodb.net'),MongoDB尝试解析这个包含无效字符的域名,DNS无法识别,因此抛出NameNotFoundException。
内容的提问来源于stack exchange,提问作者Alok Marathe
相关产品推荐
相关产品推荐

