yas*_*eco 4 java mongodb spring-boot
我收到此信息消息:
24 年 10 月 19 日 08:05:53:481 INFO Thread-4 omdconnection:71 - 已关闭与 mongodb:27017 的连接 [connectionId{localValue:35, serverValue:38}],因为池已关闭。
还有以下错误:
java.lang.IllegalStateException:池在 com.mongodb.internal.connection.ConcurrentPool.get(ConcurrentPool.java:137) 处关闭
java.lang.IllegalStateException:状态应该是:在 com.mongodb.assertions.Assertions.isTrue(Assertions.java:70) 打开
这就是我创建的方式MongoClient
,简单明了:
@Bean
@Override
public MongoClient mongoClient() {
return new MongoClient(host);
}
Run Code Online (Sandbox Code Playgroud)
这个SO 答案建议设置socketKeepAlive(true)
,但据我了解,此方法已被弃用,因为默认情况下它是正确的。
我想了解该错误的含义是什么?(即为什么游泳池会关闭?)。
我是否需要设置/调整一些 Spring-Boot 参数?我需要以不同的方式构建 MongoClient 吗?
此错误意味着您的 MongoDB 连接由于某种原因被关闭,并且您正在尝试使用此连接池。
如果您使用 springs 连接池,您可以在没有 spring 的情况下创建连接池,并且可以在关闭时管理连接。(比如错误时重新连接)
如果您正在进行多线程操作,请更改您的MongoClient
beanScope
并创建基于线程的。Mongoclient 在后台创建一个连接池,并将已经池化的连接提供给新创建的客户端,因此基于线程的客户端不会在每个自动装配操作上创建连接。
如果您想使用该socketKeepAlive
功能,您需要提供如下选项:
MongoClientOptions options = MongoClientOptions.builder()
.socketKeepAlive(false)
.build();
MongoClient mongoClient = new MongoClient( "yourhost:mongoport" , options);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15493 次 |
最近记录: |