zoukankan      html  css  js  c++  java
  • mongoDB执行插入语句报错com.mongodb.MongoSocketReadException: Prematurely reached end of stream

    写在前面,不想看分析的直接看结果:总结来说就是你使用了Decimal128的Bson类型,但是你的mongodb版本低于3.4版本,不支持这个类型。

    在执行插入语句的时候,报错,如下:

    2018-07-04 18:14:23.660 ERROR com.mongodb.MongoSocketReadException: Prematurely reached end of stream
    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.MixedBulkWriteOperation$Run$2.executeWriteCommandProtocol(MixedBulkWriteOperation.java:465)
    	at com.mongodb.operation.MixedBulkWriteOperation$Run$RunExecutor.execute(MixedBulkWriteOperation.java:656)
    	at com.mongodb.operation.MixedBulkWriteOperation$Run.execute(MixedBulkWriteOperation.java:411)
    	at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:177)
    	at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:168)
    	at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:426)
    	at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:417)
    	at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:168)
    	at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:74)
    	at com.mongodb.Mongo.execute(Mongo.java:845)
    	at com.mongodb.Mongo$2.execute(Mongo.java:828)
    	at com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:550)
    	at com.mongodb.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:317)
    	at com.mongodb.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:307)
    	at cn.xlink.cecep.server.mongo.MongoService.insertIngore(MongoService.java:49)
    	at cn.xlink.cecep.server.mongo.impl.ContrlCabinetServiceImpl.insert(ContrlCabinetServiceImpl.java:78)
    	at com.alibaba.dubbo.common.bytecode.Wrapper17.invokeMethod(Wrapper17.java)
    	at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)
    	at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)
    	at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)
    	at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)
    	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    	at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
    	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    	at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)
    	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)
    	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    	at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:60)
    	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    	at com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:112)
    	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    	at com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)
    	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    	at com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38)
    	at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
    	at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:108)
    	at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84)
    	at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170)
    	at com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)
    	at com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at java.lang.Thread.run(Thread.java:748)

    经过我的百度,以及查资料发现并不能解决我的问题,大部分说的是连接池满了什么的,重启或者修改配置之类的,但是我其他的查询,插入都是正常,只要执行这个接口,这个插入方法就报错,然后我就分析了代码,发现下面的可疑信息:

    Decimal128 decimal128 = new Decimal128(new BigDecimal(data.getString("testNum")));
    item_doc.put("testNum", decimal128);

    我这里用到了mongodb的新的类型Decimal128,是在3.4及以后的版本的新特性,实在3.4及以后的版本的新特性,官网地址:https://docs.mongodb.com/manual/reference/bson-types/



    但是我自身的mongodb数据库版本是3.2.7,不支持这个新类型,导致错误。


    总结来说就是你使用了Decimal128的Bson类型,但是你的mongodb版本低于3.4版本,不支持这个类型。

    仅作参考,如果错漏欢迎留言指正。

  • 相关阅读:
    python打印出当下的小时、分钟
    flask_ajax登录注册
    flask_SQlalchemy的复杂使用
    flask使用现有的数据表、在网页中显示数据
    js 的DOMdocument的使用
    pymysql的是使用
    通过ajax修改div id="div1" 的值
    关于django2.2使用xadmin的方法
    DOS windows 使用bat脚本获取 IP MAC 系统信息
    apache https 双向证书生成
  • 原文地址:https://www.cnblogs.com/timeout/p/10145636.html
Copyright © 2011-2022 走看看