相关文章推荐
瘦瘦的野马  ·  SQL ...·  2 周前    · 
酷酷的鸵鸟  ·  选择器 Select - Ant Design·  2 周前    · 
爱搭讪的开水瓶  ·  Android 停止 ...·  4 天前    · 
大鼻子的椅子  ·  Android Socket ...·  1 年前    · 
睡不着的地瓜  ·  北京内推 | ...·  1 年前    · 

通过系统访问MongoDB数据库,经过一段时间直接再次访问数据时,出现异常报错

019-10-23 10:49:26.796 ERROR 11368 --- [nio-8081-exec-9] c.a.d.m.advice.**  : Exception receiving message; nested exception is com.mongodb.MongoSocketReadException: Exception receiving message
org.springframework.data.mongodb.UncategorizedMongoDbException: Exception receiving message; nested exception is com.mongodb.MongoSocketReadException: Exception receiving message

经查找发现是因为MongDB服务器经过一段时间会把Java保持的连接状态变成close_wait,于是就出现了项目访问数据库报错情况。

mongoDB配置

#自动重连 
mongo.autoConnectRetry=true 
#scoket保持活动 
mongo.socketKeepAlive= true 
#scoket超时时间 
mongo.socketTimeout=XX

增强MongoDb设置
在Springboot项目的mongoDB配置中发现没有max-connection-idle-time等相关配置,查找相关资料发现了spring-boot-starter-data-mongodb增强包
1.在使用了spring-boot-starter-data-mongodb的项目中,增加以下依赖

#自动重连 
<dependency>
    <groupId>com.spring4all</groupId>
    <artifactId>mongodb-plus-spring-boot-starter</artifactId>
    <version>1.0.0.RELEASE</version>
</dependency>

2.在应用主类上增加==@EnableMongoPlus==注解,比如:

@EnableMongoPlus
@SpringBootApplication
@ServletComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);

可用配置参数

spring.data.mongodb.option.min-connection-per-host=0
spring.data.mongodb.option.max-connection-per-host=100
spring.data.mongodb.option.threads-allowed-to-block-for-connection-multiplier=5
spring.data.mongodb.option.server-selection-timeout=30000
spring.data.mongodb.option.max-wait-time=120000
spring.data.mongodb.option.max-connection-idle-time=0
spring.data.mongodb.option.max-connection-life-time=0
spring.data.mongodb.option.connect-timeout=10000
spring.data.mongodb.option.socket-timeout=0
spring.data.mongodb.option.socket-keep-alive=false
spring.data.mongodb.option.ssl-enabled=false
spring.data.mongodb.option.ssl-invalid-host-name-allowed=false
spring.data.mongodb.option.always-use-m-beans=false
spring.data.mongodb.option.heartbeat-socket-timeout=20000
spring.data.mongodb.option.heartbeat-connect-timeout=20000
spring.data.mongodb.option.min-heartbeat-frequency=500
spring.data.mongodb.option.heartbeat-frequency=10000
spring.data.mongodb.option.local-threshold=15

上述配置值均为默认值

问题描述通过系统访问MongoDB数据库,经过一段时间直接再次访问数据时,出现异常报错019-10-23 10:49:26.796 ERROR 11368 --- [nio-8081-exec-9] c.a.d.m.advice.** : Exception receiving message; nested exception is com.mongodb.MongoSocketReadE...
转载请注明出处:遇到问题MongoSocketReadException: Exception receiving message 遇到问题 线上运行的SpringBoot项目隔一段时间 随机报错如下: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream....
mongo没有配置空闲连接时间,而spring boot 默认的空闲连接时间为0。当连接闲置一段时间,由于防火墙或者负载均衡的原因,导致连接被关闭,而客户端并不知道,当客户端继续使用这个关闭的连接进行读写时就会出错。 解决办法就是设置连接闲置时间,当超过这个闲置时间客户端主动关闭连接,下次使用时重新建立连接,这样... 线上跑批插入数据到mongo的过程中,会不定时的出现UncategorizedMongoDbException这个异常,发生的次数不是很多,但是看着很烦;于是乎查阅了一下资料; 解决方法 spring整合mongo的时候 添加:max-connection-idle-time=“60000” 最大空闲连接时间属性后,该异常没有在发生;
在window连接使用远程linux上的mongodb,经常出现这个错误,实在不能忍了,就去Google找了一下答案。 这是由于TCP的KeepAlive 机制导致的。可以了解一下TCP 中的 KeepAlive 机制 以下是mongoDB官方文档的答案。 如果在客户端和服务器之间或者没有其他合理原因的分片集群或副本集的成员之间遇到套接字错误,请检查TCP keepalive值(例如,tcp_ke...
该服务负责处理收到的订单,即所谓的接收订单,又称预期收据或接收通知。 在托板或盒子进入仓库之前,必须事先宣布。 该框必须在系统中注册有一个标识符,以及一些在项目之间可能有所不同的其他特征。 该服务可以在没有任何其他服务的情况下在本地构建和运行。 构建代码: $ ./mvnw package 在独立模式下运行: $ java -jar target/openwms-wms-receiving-exec.jar 运行分布式 或另外在已运行Service Registry,Configuration Server和RabbitMQ代理的分布式环境中运行: $ java -Dspring.profiles.active=ASYNCHRONOUS,DEMO -jar target/openwms-wms-receiving-exec.jar 在微服务上找到更多文
"Exception receiving message; nested exception is com.mongodb.MongoSocketRead" 这个错误消息通常表示与 MongoDB 服务器的连接发生了问题。具体的解决方法可能因具体情况而异,但是以下是一些常见的解决步骤: 1. 检查 MongoDB 服务器是否正在运行并且可以通过网络访问。 2. 检查代码中的 MongoDB 连接字符串是否正确。 3. 检查防火墙是否阻止了与 MongoDB 服务器的通信。 4. 尝试重启 MongoDB 服务器或重启应用程序。 如果以上步骤都无法解决问题,建议查看 MongoDB 服务器的日志以获取更多信息,并尝试搜索在线问答社区以寻找其他可能的解决方案
CSDN-Ada助手: 亲爱的博主,我要先夸赞你的创作实在是不易啊!你对Java集合知识点的整理和分享给了很多学习者提供了宝贵的学习资源。你的文章内容清晰明了,让读者能够轻松掌握和理解这个复杂的主题。真是一篇让人难以忽视的博客! 基于你对Java集合知识点的深度理解和清晰阐述,我迫不及待地期待你下一篇博客的发布。经过一番思考,我认为下一篇博客的可能主题是:“Java集合框架的性能调优技巧”。通过对集合框架的性能瓶颈进行分析和解决方案的探讨,你将为读者们提供了更深入的学习内容,帮助他们让Java集合的使用更高效、更稳定。相信这个主题将会吸引更多的读者,让他们对你的博客越来越依赖。祝你写作愉快,期待你的精彩发表!