当前位置: 首页 > 知识库问答 >
问题:

MongoDB:`com.mongodb.mongoSocketReadException:用morphia过早到达流结束

翟聪
2023-03-14

我有一个简单的数据结构(下面引用的事务)要插入到MongoDB中:

{"amount":111,"debitAcc":"588188286231743e7d5c923d","type":"CHARGE"}

我得到以下错误堆栈:

com.mongodb.MongoSocketReadException: Prematurely reached end of stream
        at com.mongodb.connection.SocketStream.read(SocketStream.java:88)
        at com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:494)
        at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:224)
        at com.mongodb.connection.UsageTrackingInternalConnection.receiveMessage(UsageTrackingInternalConnection.java:96)
        at com.mongodb.connection.DefaultConnectionPool$PooledConnection.receiveMessage(DefaultConnectionPool.java:440)
        at com.mongodb.connection.WriteCommandProtocol.receiveMessage(WriteCommandProtocol.java:262)
        at com.mongodb.connection.WriteCommandProtocol.execute(WriteCommandProtocol.java:104)
        at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.java:67)
        at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.java:37)
        at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:168)
        at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:289)
        at com.mongodb.connection.DefaultServerConnection.insertCommand(DefaultServerConnection.java:118)
        at com.mongodb.operation.InsertOperation.executeCommandProtocol(InsertOperation.java:76)
        at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.java:139)
        at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.java:133)
        at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:422)
        at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:413)
        at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:133)
        at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:60)
        at com.mongodb.Mongo.execute(Mongo.java:845)
        at com.mongodb.Mongo$2.execute(Mongo.java:828)
        at com.mongodb.DBCollection.executeWriteOperation(DBCollection.java:342)
        at com.mongodb.DBCollection.insert(DBCollection.java:337)
        at com.mongodb.DBCollection.insert(DBCollection.java:328)
        at org.mongodb.morphia.DatastoreImpl.saveDocument(DatastoreImpl.java:1297)
        at org.mongodb.morphia.DatastoreImpl.tryVersionedUpdate(DatastoreImpl.java:1340)
        at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:1286)
        at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:775)
        at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:758)

我的mongodb版本是3.4.2

更新2

该系统可用于其他写入(即使是大得多的记录)

共有1个答案

澹台冯浩
2023-03-14

大多数情况下,这是长读写超时的结果。

尝试增加超时或完全删除超时:

    MongoClientOptions.Builder options_builder = new MongoClientOptions.Builder();
    options_builder.maxConnectionIdleTime(<some_long_time>);
    MongoClientOptions options = options_builder.build();
    MongoClient mongo_db = new MongoClient ("your.db.address", options);
 类似资料:
  • 当我试图连接到MongoDB Atlas免费层时,我得到了一个过早到达流结束的错误。使用Java1.8和Mongo驱动程序3.8.0。这和Atlas中的集群设置有什么关系吗?我在MongoDB本地主机上使用了相同的程序。 错误:

  • 在我的应用程序中,我使用MongoDB,它在本地与Wildfly 11.0.0一起工作得很好。Alpha1-部署在本地应用程序服务器和本地MongoDB数据库后,应用程序可以在上下文路径和端口上访问-一切都很好。 我的下一步是将这个应用程序部署到服务器maschine上的JBoss服务器上。我将MongoDB URI更改为MongoDB服务器: 如果我部署这个应用程序,我会在底部得到以下日志条目。

  • 我正在开发一个Java的Restful Web应用程序,并计划将MongoDB与吗啡用作ODM。由于我是MongoDB的新手,我需要一些建议。 > 处理db连接的最佳方法是使用db连接池,mongoClient负责处理。 所以我需要重用上面的数据存储,而不是在每次请求时创建一个新实例,因为它会浪费大量资源并影响性能。我应该将上述实现为单例类吗?有人能帮我解决这个问题吗?

  • 我试图使用Morphia从使用Mongo V3.6.4的mongodb.Im中读取内容。我已经添加了Morphia依赖关系: 现在我尝试连接到我的MongoDB: Mongo肯定是像我以前的连接代码一样运行...

  • 我试图解密和验证一个加密的文件,但得到一个异常java。伊奥。EOFEException:执行完整性检查时,PartialInputStream中的流过早结束。数据被正确解密,签名被检查。 异常发生在pbe中。验证()。 有人知道为什么会发生这种情况,以及如何解决它吗? 我在1.51版上使用JDK15。 代码如下: 完整的堆栈跟踪: