首页 > 数据库技术 > 详细

福建体彩31选7走势图:记一次spring boot中MongoDB Prematurely reached end of stream的异常解决

时间:2018-01-21 23:20:25      阅读:4952      评论:0      收藏:0      [点我收藏+]

深圳风采开奖直播 www.nskjr.cn 标签:ssi   query   got   ping   dex   exception   新建   end   customer   

  在spring boot项目中使用了mongodb,当一段时间没有操作mongodb,下次操作mongodb时就会出现异常。异常如下:

org.springframework.data.mongodb.UncategorizedMongoDbException: Prematurely reached end of stream; nested exception is com.mongodb.MongoSocketReadException: Prematurely reached end of stream
        at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:107)
        at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:2146)
        at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1928)
        at org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1736)
        at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:606)
        at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:601)
        at com.lwli.service.impl.SessionServiceImpl.findOneSessionByCustomerIdAndStatus(SessionServiceImpl.java:51)
        at java.lang.Thread.run(Thread.java:745)
Caused by: 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.QueryProtocol.execute(QueryProtocol.java:289)
        at com.mongodb.connection.QueryProtocol.execute(QueryProtocol.java:54)
        at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:168)
        at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:289)
        at com.mongodb.connection.DefaultServerConnection.query(DefaultServerConnection.java:212)
        at com.mongodb.operation.FindOperation$1.call(FindOperation.java:525)
        at com.mongodb.operation.FindOperation$1.call(FindOperation.java:510)
        at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:435)
        at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:408)
        at com.mongodb.operation.FindOperation.execute(FindOperation.java:510)
        at com.mongodb.operation.FindOperation.execute(FindOperation.java:81)
        at com.mongodb.Mongo.execute(Mongo.java:836)
        at com.mongodb.Mongo$2.execute(Mongo.java:823)
        at com.mongodb.DBCursor.initializeCursor(DBCursor.java:870)
        at com.mongodb.DBCursor.hasNext(DBCursor.java:142)
        at com.mongodb.DBCursor.one(DBCursor.java:679)
        at com.mongodb.DBCollection.findOne(DBCollection.java:833)
        at com.mongodb.DBCollection.findOne(DBCollection.java:796)
        at com.mongodb.DBCollection.findOne(DBCollection.java:743)
        at org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:2197)
        at org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:2181)
        at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1925)
        ... 12 more

 

  网上搜了下,这个问题原因很多,主要的原因可能有连接超时,读写超时等,按照别人的提示,设置了

socketKeepAlive = true;
socketTimeout = 30000;

  然而并没有效果,超过一段时间再次访问mongdb时,任然出现异常。在google搜索时,发现一篇文章https://studio3t.com/whats-new/how-to-prevent-your-connection-from-dropping-with-hosted-mongodb-instances/,上面提到了一点,当连接闲置一段时间,由于防火墙或者负载均衡的原因,导致连接被关闭,而客户端并不知道,当客户端继续使用这个关闭的连接进行读写时就会出错。

  解决办法就是设置连接闲置时间,当超过这个闲置时间客户端主动关闭连接,下次使用时重新建立连接,这样可以有效避免连接失效的问题。

  在spring boot中配置MongoClientOptions的bean。例如将最大闲置时间设为6000ms。

@Configuration
public class WechatMpConfiguration {

    @Bean
    public MongoClientOptions mongoOptions() {
        return MongoClientOptions.builder().maxConnectionIdleTime(6000).build();
    }
}

 

  通过上面的设置后,后面没有再出现Prematurely reached end of stream异常了。

 

记一次spring boot中MongoDB Prematurely reached end of stream的异常解决

标签:ssi   query   got   ping   dex   exception   新建   end   customer   

原文:https://www.cnblogs.com/lilinwei340/p/8325819.html

(0)
(1)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
? 2014 深圳风采开奖直播 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号

  • 新闻有温度——西部网新闻频道(陕西新闻网) news.cnwest.com 2019-01-18
  • 白岩松康辉撒贝宁欧阳夏丹 揭秘央视主播成功秘诀 2019-01-18
  • 话剧《婚姻生活》跨越时空亮相 90分钟大戏浓缩婚姻真实纠葛 2019-01-17
  • 汇聚正能量 讴歌新时代——关于用微电影传播核心价值观的倡议书 2019-01-16
  • 【改革·印记——看中国发展】老民警老照片讲述公安事业的几十年变迁 2019-01-15
  • 高清:西湖荷花进入盛花期 断桥赏荷游人如织 2019-01-14
  • 这样的帖子写主贴反驳,实在丢不起人! 2019-01-14
  • 江西日报社社长王晖祝贺人民日报创刊70周年 2019-01-13
  • 山西:“一县一策”集中攻坚深度贫困县——黄河新闻网 2019-01-13
  • 沈阳举办首届锡伯族泥巴节 2019-01-12
  • 四川摆出端午旅游大餐:推荐67条精品线路 30余项优惠措施 2019-01-12
  • 重庆市再次降低一般工商业电价 促进实体经济发展 2019-01-11
  • 孟非汪俊林天宝洞探秘 2019-01-11
  • 民俗迎端午 包粽子、赛龙舟、点雄黄、挂香囊 2019-01-10
  • 发挥自身优势 奋力走在前列——习近平总书记在山东考察回访记 2019-01-10
  • 299| 58| 675| 888| 918| 887| 935| 742| 260| 411|