为什么我的 mongo 数据库最多有 4 个开放连接?

问题描述 投票:0回答:3

我第一次使用 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");
    }
mongodb spring-data
3个回答
1
投票

我一直在尝试使用 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”,它将打开您无法从此配置管理的新连接。


0
投票

进入您的 mongo 和 min 并运行 db.serverStatus().connections 您将看到打开的连接。 看起来没有关闭连接...看看 stackoverflow 中的此页面


0
投票

您可以通过设置

maxPoolSize
来调整连接数,例如
spring.data.mongodb.uri=mongodb://localhost:27017/?connectTimeoutMS=10000&minPoolSize=0&maxPoolSize=2&maxIdleTimeMS=100000

池的默认大小是CPU核心数,如果有超线程,则x2。

© www.soinside.com 2019 - 2024. All rights reserved.