通过系统访问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助手: