You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:43:22