java - Springboot - MongoDb:过早到达流的末尾
问题描述
尝试向服务器发送大请求时遇到以下问题。
com.mongodb.MongoSocketReadException: Prematurely reached end of stream
at com.mongodb.connection.SocketStream.read(SocketStream.java:88) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:494) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:224) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.connection.UsageTrackingInternalConnection.receiveMessage(UsageTrackingInternalConnection.java:96) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.connection.DefaultConnectionPool$PooledConnection.receiveMessage(DefaultConnectionPool.java:440) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.connection.WriteCommandProtocol.receiveMessage(WriteCommandProtocol.java:262) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.connection.WriteCommandProtocol.execute(WriteCommandProtocol.java:104) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.connection.UpdateCommandProtocol.execute(UpdateCommandProtocol.java:64) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.connection.UpdateCommandProtocol.execute(UpdateCommandProtocol.java:37) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:168) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:289) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.connection.DefaultServerConnection.updateCommand(DefaultServerConnection.java:143) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.operation.UpdateOperation.executeCommandProtocol(UpdateOperation.java:89) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.java:139) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.java:133) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:422) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:413) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:133) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:60) ~[mongodb-driver-core-3.4.2.jar!/:na]
at com.mongodb.Mongo.execute(Mongo.java:845) ~[mongodb-driver-3.4.2.jar!/:na]
at com.mongodb.Mongo$2.execute(Mongo.java:828) ~[mongodb-driver-3.4.2.jar!/:na]
at com.mongodb.DBCollection.executeWriteOperation(DBCollection.java:342) ~[mongodb-driver-3.4.2.jar!/:na]
at com.mongodb.DBCollection.replaceOrInsert(DBCollection.java:420) ~[mongodb-driver-3.4.2.jar!/:na]
at com.mongodb.DBCollection.save(DBCollection.java:409) ~[mongodb-driver-3.4.2.jar!/:na]
at com.mongodb.DBCollection.save(DBCollection.java:382) ~[mongodb-driver-3.4.2.jar!/:na]
...
根据我的调查,发生此错误是因为与 MongoDb 的连接没有保持活动状态。所以我尝试添加一些配置来延长超时时间:
@SpringBootApplication
@EnableResourceServer
@EnableDiscoveryClient
@EnableFeignClients
@EnableOAuth2Client
@EnableConfigurationProperties
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableWebSecurity
public class CodelabArticleServiceApplication extends ResourceServerConfigurerAdapter {
public static void main(String[] args) {
SpringApplication.run(CodelabArticleServiceApplication.class, args);
}
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.authorizeRequests().antMatchers("/*").permitAll().anyRequest().authenticated();
// @formatter:on
}
@Bean
@ConfigurationProperties(prefix = "security.oauth2.client")
public ClientCredentialsResourceDetails clientCredentialsResourceDetails() {
return new ClientCredentialsResourceDetails();
}
@Bean
public MongoClientOptions mongoOptions() {
int timeout = 3600000;
return MongoClientOptions.builder().socketKeepAlive(true).maxConnectionIdleTime(timeout)
.maxConnectionLifeTime(timeout).maxWaitTime(timeout).socketTimeout(timeout).build();
}
@Bean
public RequestInterceptor oauth2FeignRequestInterceptor() {
return new OAuth2FeignRequestInterceptor(new DefaultOAuth2ClientContext(), clientCredentialsResourceDetails());
}
@Bean
public OAuth2RestTemplate clientCredentialsRestTemplate() {
return new OAuth2RestTemplate(clientCredentialsResourceDetails());
}
}
由于某些原因,它仍然无法正常工作。我想知道我的配置是正确的还是有一些额外的任务可以完成这项工作?
解决方案
推荐阅读
- javascript - 具有二维数组js的矩阵
- javascript - 使用任何此命令 sencha ap watch/run/build 在 sencha cmd 中构建失败,它开始突然发生这里是可用的日志
- python - 如何使用 Django 变量设置 HTML 元素的 id?
- javascript - 发送错误信息的正确方式,但代码仍然运行
- node.js - 如何获取大小取决于 MongoDB 聚合的某些条件
- python - 如何创建自定义 Django 管理员来替换现有的 Django 管理员?
- python-3.x - 在 python3.7.5 中导入 cv2 输出一些不寻常的东西
- python - 在列表中搜索字符串值
- git - ssh 服务器如何知道哪个公钥与 ssh 私钥匹配?
- angular - 调用 API 时可观察到的响应数据在控制台中显示数据但未在模板角度 10 中呈现