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

使用DNS SRV和TXT记录时Spring上下文无法实例化Mongo相关Bean

解决方案

方案1:添加运行期JVM模块导出参数

你之前仅在编译插件中配置了--add-exports参数,仅作用于编译阶段,运行阶段JVM未加载该配置才会报错,根据你的运行场景选择对应配置:

  • 如果你使用Spring Boot可执行Jar直接启动:
    启动命令新增JVM参数即可:
    java --add-exports jdk.naming.dns/com.sun.jndi.dns=java.naming -jar 你的应用包名.jar
    
    如需固化到打包配置中,可在spring-boot-maven-plugin添加如下配置:
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <jvmArguments>--add-exports jdk.naming.dns/com.sun.jndi.dns=java.naming</jvmArguments>
        </configuration>
    </plugin>
    
  • 如果你是打War包部署到外部Jetty服务器:
    编辑Jetty根目录下的start.ini配置文件,新增一行配置后重启Jetty即可:
    --add-exports=jdk.naming.dns/com.sun.jndi.dns=java.naming
    

方案2:绕过SRV解析(无需调整JVM参数)

直接将MongoDB连接串从mongodb+srv格式替换为普通mongodb格式,手动填写所有MongoDB节点地址、认证、副本集等参数,无需走SRV记录解析,自然不会触发JNDI相关依赖,示例连接串:

mongodb://用户名:密码@mongo节点1地址:27017,mongo节点2地址:27017,mongo节点3地址:27017/库名?authSource=admin&replicaSet=副本集名称

此前方案无效原因说明

  • 新增jndi.properties无效:报错根因是DnsContextFactory类被Java模块化机制限制访问,并非JNDI配置缺失
  • 仅配置编译插件导出参数无效:该参数仅作用于编译期校验,运行期模块化限制仍会拦截类加载
  • 升级Jetty版本无效:该问题和Jetty本身无关,是Java 9+模块化的通用限制

内容的提问来源于stack exchange,提问作者SocketM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:15:00