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

如何通过YAML变量与配置类屏蔽MongoDB连接异常日志?

解决MongoDB监控线程连接localhost:27017的异常日志问题

问题场景

日志中频繁出现MongoDB监控线程连接localhost:27017失败的异常,希望通过YAML配置变量控制:当不存在指定DataType变量时,自动排除MongoDB相关配置,避免生成该异常日志。目前已尝试创建MongoDBConfig配置类,但未达到预期效果。

异常日志详情

2023-01-13 14:03:40.620  INFO 11124 --- [localhost:27017] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server localhost:27017

com.mongodb.MongoSocketOpenException: Exception opening socket
    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.6.1.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:180) ~[mongodb-driver-core-4.6.1.jar:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:193) ~[mongodb-driver-core-4.6.1.jar:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:157) ~[mongodb-driver-core-4.6.1.jar:na]
    at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: java.net.ConnectException: Connection refused: no further information
    at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
    at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[na:na]
    at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) ~[na:na]
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na]
    at java.base/java.net.Socket.connect(Socket.java:633) ~[na:na]
    at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:107) ~[mongodb-driver-core-4.6.1.jar:na]
    at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.6.1.jar:na]
    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.6.1.jar:na]
    ... 4 common frames omitted

现有配置类代码

@Configuration
@AutoConfigureBefore(value = MongoAutoConfiguration.class)
@ConditionalOnProperty(prefix = "${mock-server.data.persist-type}", value = "DataType", matchIfMissing = true)
public class MongoDBConfig {

解决方案

方案一:修正配置类条件,按需加载MongoDB配置

现有@ConditionalOnProperty存在两处逻辑错误:

  1. prefix属性不能用${}包裹,它仅代表配置项的前缀部分
  2. matchIfMissing = true与需求相反,应仅当配置值匹配时才加载配置

修正后的配置类代码:

@Configuration
@AutoConfigureBefore(MongoAutoConfiguration.class)
// 仅当mock-server.data.persist-type等于DataType时,才加载该配置类
@ConditionalOnProperty(prefix = "mock-server.data", name = "persist-type", havingValue = "DataType", matchIfMissing = false)
public class MongoDBConfig {
    // 在此添加MongoDB相关Bean配置(如MongoClient、MongoTemplate等)
}

当YAML中未配置mock-server.data.persist-type或其值不等于DataType时,Spring不会加载MongoDB相关配置,自然不会触发连接尝试,也就不会生成该异常日志。

方案二:直接屏蔽日志(不停止连接尝试)

如果不需要完全禁用MongoDB配置,只是想屏蔽该异常日志,可以在application.yml中调整日志级别:

logging:
  level:
    org.mongodb.driver.cluster: ERROR

将org.mongodb.driver.cluster的日志级别设为ERROR,即可过滤掉INFO级别的连接异常日志,但MongoDB监控线程仍会尝试连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:55:30