org.mongodb.driver.cluster : Exception in monitor thread while connecting to server localhost:27017

本文介绍了解决Spring Boot应用中出现的MongoDB连接错误的方法,包括配置属性和禁用自动配置。
com.mongodb.MongoSocketOpenException: Exception opening socket
    at com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongodb-driver-core-3.0.4.jar:na]
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) ~[mongodb-driver-core-3.0.4.jar:na]
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127) ~[mongodb-driver-core-3.0.4.jar:na]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_45]
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_45]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345) ~[na:1.8.0_45]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_45]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_45]
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_45]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_45]
    at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_45]
    at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) ~[mongodb-driver-core-3.0.4.jar:na]
    at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongodb-driver-core-3.0.4.jar:na]
    ... 3 common frames omitted

解决方案:

Spring Boot has a feature called "auto configuration". In this case, as soon as the Mongo driver is detected on the classpath, the MongoAutoConfiguration is activated with default values, which point to localhost:27017. If you don't want that behaviour, you can now either configure the properties for MongoDB (see http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-mongodb for valid property keys) or disable the MongoAutoConfiguration:

@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})

2025-09-25 19:09:23.840 (mala] INFO Ilfcom.huawel.foundation.commons.netrics.MemeoryMetricsCllent.40] memeory metrics elient created 2025-09-25 19:09:25.265 (malal INFO (lfe.h.foundation.commoas.reflections.AnnotationMetadataReader.841 resolve class annotations from package: com.huawei in class loadersr org springframework.boot.loader.launch.LaunchedClassloader03a022576 cost 902ms 2025-09-25 19:09:25.279 (maln] INFO (lfc.huawei.foundation.commons.reflections.AnnotationsScanner.195] scan and match annotations HeanMappings,ReanMapping,MappingConfigurations from com huawei cost 13ms кuZZ6 1800 pUR [Temanq B00] 20sssssбaб4ssssdetS了ha3 рUR 0ROR [StZ A:on0sдбoIddeх Кpohoмд дaтdoo GOвO воfерCno] TeRenQ BCO][] GANI [UTPW] OOZ SZ:SO(61 SZ-60-SzOZ 2025-09-25 19:09:25.318 (main] INPO [lfc.h.foundation.commons.system.sempler.RuntimeSamplerFactory.341 Corrent RuntimeSampler is ' com,huawei, foundation,commons, ayatem, sempler.MXBeanRuntimeSampler' 2025-09-25 19:09:25.318 (main] INPO []c.h.foundation.Comnons.system.sampler.AbstractRuntimeSampler.75] Runtime sampler started 2025-09-25 19:09:25.770 (main] INFO [lforg.nongodb.driver.closter.711 Adding discovered server S(mongosource.urll:27017 to client view of cluster от вотаdеаха (9と1аеркотагаватаргаровово бао11] оам1 1LТOLZミ(там воснокобоов)@-(.1119, ooдndтаокор ".JOt9 (V19SS9c0OqS ZZSP99, onqea)praenento-renento) si8 sziso181 sz-60-sz0z monitor thread while connecting to server $(mongosource.ur1]:27017 com.mongodb.MongoSocketException: S{nongosource.urll: Name or service not known at com.mongodb.internal.connection.ServerAddressllelper.getSocketAddresses(ServerAddresalelper,jave:75) at com.mongodb.internal.connection.SocketStrwem,inftiallzeSocket(SocketStreem,jave:100) at com mongodb,internal,connection.SocketStrwam,open(SocketStreem.jave:79)的 at com mongodb,internal,connection.IaternalStreanConnection.open(InternalStreamConnection,jave:233) (81Z:PAиГ'доптаокиватеSатнеде0) сотадтаокедавлзерд1ХО01 1 20310ожг8АзедС203твоугеАзедатпедед вотаавсввог [уалецит аробоов воа пв at com.mongodb.internal.connection.DefaultServerMonitorSServerMonitor.run(DefaultServerMonitor.java:176) Caused by: java.net.UnknownHostException: S{nongosource.url}: Name or service not knowa at java.base/java.net.InetfAddressimpl.lookupA11HostAddr(Native Method) at java.base/java.net.InetfAddressInpl.lookupAl1HostAddr(Inet6Addressimpl.java:32) at java.bese/jave.net.InetAddressSPIatformResolver.lookupByName InetAddreas,jave:1211) at java.base/java.net.InetAddress.getAddressesFromNaneService(InetAddress.java:1828) at java.bese/jave.net.InetAddressONaneServiceAddonases.get(InetAddreas,java:1139)的 at java.base/java.net.InetAddress.getA11ByNameO(InetAddreas.jave:1918)的 at java.bese/jave.net.InetAddreas.getA11ByName(InetAddeess,java:1600) at com.mongodb.internal.connection.DefaultTnetAddressResolver.lookupByName(DefaultInetAddressResolver.Java:34) at com.mongodb.internal.connection.ServerAddressHelper.getSocketAddresses(ServerAddressHelper.Java:71) ... 5 common frames cmitted 2025-09-25 19:09:26.053 (mainl INFO [lforg.mongodb.driver.elient.711 KongoCllent with metadate f\"deivert": (\"aame\": \"mongo-jave-deiverlsynclapring-boot\", \"version\"; 代はのg1w1da\ “(m\p9日21e*Ze201O1 Z001210S10181109-0101 Sa\ 3a Cors2eA,\ ". p9q3PP.\ :a eompеатц3Ra\ ", xn01T.5 :a R0P0, xn0TTa\ Sa 9dA1a\ト :. S0.\ “{a\T”ZSu \"Jave/Bisheng/21.0.7+8\", \"env\": {A"container\": {\"orchestrator ": A"kubernetes "}}} created with settings MongoClientSettings(readPreferencemprimary, aade ee ывв a а ta de
09-26
虽然给定的引用中未直接提及MongoDB连接服务器时出现Java heap space内存溢出错误的解决方案,但可以从通用的Java内存溢出问题角度来分析解决办法。 ### 增加JVM堆内存大小 可以通过修改JVM启动参数来增加堆内存的大小。在运行Java程序时,可以使用以下参数: ```plaintext -Xms<size>:设置JVM初始堆内存大小 -Xmx<size>:设置JVM最大堆内存大小 ``` 例如,将初始堆内存和最大堆内存都设置为4GB,可以使用以下命令启动Java程序: ```plaintext java -Xms4g -Xmx4g YourMainClass ``` ### 检查代码中是否存在内存泄漏 - **资源未关闭**:确保在使用完MongoDB连接、游标等资源后,及时关闭。例如,在使用MongoDB的游标时,使用完后要调用`close()`方法关闭游标。 ```java import com.mongodb.client.MongoClients; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import org.bson.Document; public class MongoExample { public static void main(String[] args) { MongoClient mongoClient = MongoClients.create("mongodb://10.210.3.13:27097"); MongoDatabase database = mongoClient.getDatabase("yourDatabase"); MongoCollection<Document> collection = database.getCollection("yourCollection"); MongoCursor<Document> cursor = collection.find().iterator(); try { while (cursor.hasNext()) { Document document = cursor.next(); // 处理文档 System.out.println(document); } } finally { cursor.close(); mongoClient.close(); } } } ``` - **对象缓存过多**:检查代码中是否存在不必要的对象缓存,或者缓存的对象没有及时清理。 ### 优化查询和数据处理 - **批量处理数据**:避免一次性加载大量数据到内存中,可以采用分页或者批量处理的方式。例如,使用MongoDB的`skip()`和`limit()`方法进行分页查询。 ```java import com.mongodb.client.MongoClients; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import org.bson.Document; public class MongoPaginationExample { public static void main(String[] args) { MongoClient mongoClient = MongoClients.create("mongodb://10.210.3.13:27097"); MongoDatabase database = mongoClient.getDatabase("yourDatabase"); MongoCollection<Document> collection = database.getCollection("yourCollection"); int pageSize = 100; int pageNumber = 0; while (true) { MongoCursor<Document> cursor = collection.find() .skip(pageNumber * pageSize) .limit(pageSize) .iterator(); if (!cursor.hasNext()) { break; } while (cursor.hasNext()) { Document document = cursor.next(); // 处理文档 System.out.println(document); } pageNumber++; } mongoClient.close(); } } ``` ### 检查服务器端配置 确保MongoDB服务器端的配置合理,避免服务器返回过多的数据。例如,检查MongoDB的查询优化器、索引等配置。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值