com.mongodb.MongoSocketReadException: Prematurely reached end of stream
com.mongodb.connection.SocketStream.read(SocketStream.java:88)
com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:491)
com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:221)
com.mongodb.connection.CommandHelper.receiveReply(CommandHelper.java:134)
com.mongodb.connection.CommandHelper.receiveCommandResult(CommandHelper.java:121)
com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32)
com.mongodb.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:83)
com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:43)
com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115)
com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
您好,因为mongo没有配置空闲连接时间,而spring boot 默认的空闲连接时间为0。当连接闲置一段时间,由于防火墙或者负载均衡的原因,导致连接被关闭,而客户端并不知道,当客户端继续使用这个关闭的连接进行读写时就会出错。所以可以设置连接闲置时间,当超过这个闲置时间客户端主动关闭连接,下次使用时重新建立连接,这样可以有效避免连接失效的问题。
1.如果使用mongo 2.x的配置时,增加设置:
spring.data.mongodb.prepare.maxConnectionIdleTime=60000
spring.data.mongodb.prepare.maxConnectionLifeTime=0
2.写一个配置类设置空闲连接时间
@Configuration
public class MongoCongig {
@Bean
public MongoClientOptions mongoOptions() {
return MongoClientOptions.builder().maxConnectionIdleTime(3000).build();
}
3.如果使用mongo 3.x 配置:
spring.data.mongodb.uri=mongodb://[username:password@]host1[:port1][,hostN[:portN]]][/[database[.collection]][?options]]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。