繁体   English   中英

使用 java 在线连接到 MongoDB 不起作用

[英]Connection to MongoDB online using java not not working

我有以下代码试图连接到 mongodb

   public static void main(String[] args) {
    MongoClientURI uri = new MongoClientURI(
            "mongodb+srv://username:password@cluster0.ytxrr.mongodb.net/testDatabase?retryWrites=true&w=majority");

    MongoClient mongoClient = new MongoClient(uri);
    MongoDatabase database = mongoClient.getDatabase("testDatabase");
    
    MongoCollection collection = database.getCollection("myTestCollection");
    
    Document document = new Document("Name","ALi").append("Age", 24).append("Country", "USA"); 
    
    collection.insertOne(document);

}

如果我尝试连接到本地主机,它工作正常。 但是如果我尝试连接在线地图集服务器,我会收到以下错误

 INFO: Exception in monitor thread while connecting to server cluster0-shard-00-01.ytxrr.mongodb.net:27017
 com.mongodb.MongoSocketWriteException: Exception sending message
at com.mongodb.internal.connection.InternalStreamConnection.translateWriteException(InternalStreamConnection.java:541)
at com.mongodb.internal.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:429)
at com.mongodb.internal.connection.InternalStreamConnection.sendCommandMessage(InternalStreamConnection.java:269)
at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:253)
at com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:83)
at com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper.java:33)
at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:105)
at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:62)
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:127)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117)
at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: javax.net.ssl.SSLHandshakeException: extension (5) should not be presented in certificate_request
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:311)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:267)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:258)
at java.base/sun.security.ssl.SSLExtensions.<init>(SSLExtensions.java:90)
at java.base/sun.security.ssl.CertificateRequest$T13CertificateRequestMessage.<init>(CertificateRequest.java:818)
at java.base/sun.security.ssl.CertificateRequest$T13CertificateRequestConsumer.consume(CertificateRequest.java:922)
at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:396)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422)
at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181)
at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1460)
at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1368)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:437)
at java.base/sun.security.ssl.SSLSocketImpl.ensureNegotiated(SSLSocketImpl.java:878)
at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:1240)
at com.mongodb.internal.connection.SocketStream.write(SocketStream.java:99)
at com.mongodb.internal.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:426)
... 9 more

有趣的是,我在台式机上而不是笔记本电脑上收到错误。 我在我的笔记本电脑上运行了相同的代码,它运行得很好,并且数据库及其相应的 collections 和文档已按应有的方式创建。 我正在尝试了解可能导致这种情况的原因。

有趣的是,代码在我的笔记本电脑上运行得很好,但在我的桌面上却失败了。 他们俩都在 JDK 14 上(我认为这不是问题)。 本地主机连接在我的桌面上的 Atlas 连接都失败了。

总而言之,我将 JDK 升级到 15 并遇到了同样的问题 - 在我的笔记本电脑上工作正常,在我的桌面上失败。,沮丧。 我删除了 .m2 文件夹并重建了项目。 还有尤里卡!!! 有用!!!

当它发生时真的很讨厌它,但一切都很好。

这是由各种 JDK 版本的 TLS 1.3 实现中的错误引起的。 您可以在此处找到修复版本列表: https://bugs.openjdk.java.net/browse/JDK-8236039

强制 TLS 1.2 是升级 JDK 的替代方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM