Mongodb:`com.Mongodb.mongoscocketreadException:使用morphia过早到达流的末尾`

Mongodb:`com.Mongodb.mongoscocketreadException:使用morphia过早到达流的末尾`,mongodb,mongodb-java,morphia,Mongodb,Mongodb Java,Morphia,我有一个简单的数据结构(下面引用的事务)要插入mongodb: {"amount":111,"debitAcc":"588188286231743e7d5c923d","type":"CHARGE"} 我得到了以下错误堆栈: com.mongodb.MongoSocketReadException: Prematurely reached end of stream at com.mongodb.connection.SocketStream.read(SocketStream

我有一个简单的数据结构(下面引用的
事务
)要插入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

问题是我在本地开发环境(MintLinux18.1)上没有这个问题。但是它不能在我的SIT环境下工作,这是一个ubuntu 16.04

有什么想法吗

使用代码更新以插入文档

其中
transactionDao.save(…)
实现可在以下位置找到:

更新2


系统可与其他写入操作(即使是更大的记录)

大多数情况下,这是由于长时间读取\写入超时造成的

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

    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);
mongoclientations.Builder选项\u Builder=new mongoclientations.Builder();
选项_builder.maxConnectionIdleTime();
MongoClientOptions=options_builder.build();
MongoClient mongo_db=新的MongoClient(“您的.db.address”,选项);

我没有根本原因,但最终我通过将字段类型从
BigDecimal
更改为
double
解决了问题


问题出现在我们的SIT环境和一个开发人员的windows环境中,该环境具有mongodb cluser设置。

最可能的原因是兼容性版本设置过低

尝试db.adminCommand({setFeatureCompatibilityVersion:“3.4”})


插入该文档的代码在哪里?其他操作是否在SIT环境中正常工作?是,其他操作正常工作。这就是为什么它困扰着我,因为它是保存一个非常小的对象的写操作,我不想通过调整连接超时值来解决这个问题。我需要理解,如果你说的是直接原因,为什么要花很长时间。请补充一些信息:还有其他的写作在起作用吗?为什么使用事务?为什么要使用New两次设置同一事务?已更新<代码>事务只是一个数据模型,而不是SQL事务。两笔新交易的好时机。我应该解决这个问题。实际上,第一个新事务用于打印调试信息,它最初并不在那里。但它不会影响结果在更新之前运行查询?这可能会减慢更新速度。您是否尝试过在
MODEL\u TYPE.save中对单个调用进行计时?甚至可以使用调试器,看看是否有调用需要很长时间才能意外完成?这可能会给我们指出一个更具体的问题。你找到根本原因了吗?不,没有。但是更改字段类型对我来说很有用。我怀疑mongodb驱动程序或MorphiaYup中存在一些问题,这也解决了我的问题。在我的例子中,它是一个需要更改的Decimal128类型的字段。我确认,当兼容版本低于3.4时,
BigDecimal
也有相同的异常