我第一次使用 Spring,我正在尝试开发 RESTful API。将
Spring Data MongoDB
与 MongoRepository
一起使用,我想知道为什么我的日志中最多出现 4 个打开的连接:
[ restartedMain] org.mongodb.driver.cluster : Cluster created with settings {hosts=[127.0.0.1:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
[127.0.0.1:27017] org.mongodb.driver.connection : Opened connection [connectionId{localValue:1, serverValue:1}] to 127.0.0.1:27017
[127.0.0.1:27017] org.mongodb.driver.cluster : Monitor thread successfully connected to server with description ServerDescription{address=127.0.0.1:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 4, 4]}, minWireVersion=0, maxWireVersion=5, maxDocumentSize=16777216, roundTripTimeNanos=1907739}
[ restartedMain] org.mongodb.driver.cluster : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
[localhost:27017] org.mongodb.driver.connection : Opened connection [connectionId{localValue:2, serverValue:2}] to localhost:27017
[localhost:27017] org.mongodb.driver.cluster : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 4, 4]}, minWireVersion=0, maxWireVersion=5, maxDocumentSize=16777216, roundTripTimeNanos=1145793}
[ restartedMain] org.mongodb.driver.connection : Opened connection [connectionId{localValue:3, serverValue:3}] to localhost:27017
[ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
[ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
[ restartedMain] org.mongodb.driver.connection : Opened connection [connectionId{localValue:4, serverValue:4}] to 127.0.0.1:27017
我的mongo配置:
@Configuration
@EnableMongoRepositories(basePackages="com.api.repo")
class MongoConfig extends AbstractMongoConfiguration {
@Value("${spring.data.mongodb.host}")
private String url;
@Value("${spring.data.mongodb.port}")
private int port;
@Value("${spring.data.mongodb.database}")
private String db;
@Override
protected String getDatabaseName() {
return db;
}
@Override
public Mongo mongo() throws Exception {
// return new Fongo("meh").getMongo();
return new MongoClient(url, port);
}
@Override
protected Collection<String> getMappingBasePackages() {
return Arrays.asList("com.api");
}
我一直在尝试使用 mongoOptions。
@Bean
public MongoClientOptions mongoOptions() {
return MongoClientOptions.builder().threadsAllowedToBlockForConnectionMultiplier(2).maxConnectionIdleTime(1).connectionsPerHost(1).minConnectionsPerHost(1).socketTimeout(2000).build();
}
使用此配置我可以管理连接。就我而言,我使用的是 spring boot 和 spring data,所以这是我除了 application.properties 之外的唯一配置
spring.data.mongodb.port=27017
spring.data.mongodb.database=your_database
请记住,如果您使用“mongobee”,它将打开您无法从此配置管理的新连接。
进入您的 mongo 和 min 并运行 db.serverStatus().connections 您将看到打开的连接。 看起来没有关闭连接...看看 stackoverflow 中的此页面
您可以通过设置
maxPoolSize
来调整连接数,例如
spring.data.mongodb.uri=mongodb://localhost:27017/?connectTimeoutMS=10000&minPoolSize=0&maxPoolSize=2&maxIdleTimeMS=100000
池的默认大小是CPU核心数,如果有超线程,则x2。