简体   繁体   English

在 spring-boot 中更改默认的 Mongo 连接池大小

[英]Change default Mongo connection pool size in spring-boot

I want to change the default size of connection pool provided by java mongodb driver which is 100 according to mongo docs.我想根据mongo docs更改java mongodb驱动程序提供的连接池的默认大小为100。

Below is the mongo client bean which I used to customize the connection pool size (refered this question ).下面是我用来自定义连接池大小的 mongo 客户端 bean(参考这个问题)。 I set both min and max connectionPerHost attributes to 1 and ran 10 parallel worker threads which interact with the DB to make sure that my change is applied.我将 min 和 max connectionPerHost 属性都设置为 1 并运行 10 个与数据库交互的并行工作线程,以确保应用我的更改。

@Bean
public Mongo mongo() throws Exception {
    MongoClientOptions.Builder clientOptions = new MongoClientOptions.Builder();
    clientOptions.minConnectionsPerHost(1);
    clientOptions.connectionsPerHost(1);
    MongoClient mongoClient = new MongoClient(new MongoClientURI(env.getProperty("mongodbhost"), clientOptions));
    return mongoClient;
}

Then I calculated the starting and ending time spots of each worker thread.然后我计算了每个工作线程的开始和结束时间点。 So that I know for sure the threads are working parallely and my connection pool size haven't changed by these configuration.这样我就可以确定线程正在并行工作,并且这些配置没有改变我的连接池大小。 Could anyone help me to get through this please?有人可以帮我解决这个问题吗? any help would be highly appreciated!任何帮助将不胜感激!

You can configure connection parameters by uri.可以通过uri配置连接参数。

spring.data.mongodb.uri=mongodb://localhost:27017/?connectTimeoutMS=300000&minPoolSize=0&maxPoolSize=10&maxIdleTimeMS=900000 spring.data.mongodb.uri=mongodb://localhost:27017/?connectTimeoutMS=300000&minPoolSize=0&maxPoolSize=10&maxIdleTimeMS=900000

Please see the following documentation for other parameters.有关其他参数,请参阅以下文档。

https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options

You can configure connection pool size via MongoDb uri parameters.您可以通过 MongoDb uri 参数配置连接池大小。 Details - https://stackoverflow.com/a/50407284/6629515详情 - https://stackoverflow.com/a/50407284/6629515

With updated Spring boot(2.0.0 +) and Mongo DB java(3.9 +) driver versions following code can be used for creating configurable mongo template in spring boot.使用更新的 Spring boot(2.0.0 +) 和 Mongo DB java(3.9 +) 驱动程序版本,以下代码可用于在 spring boot 中创建可配置的 mongo 模板。

Most of the configurations that were earlier part of MongoClientOptions are moved to MongoClientSettings. MongoClientOptions 早期部分的大多数配置都移到了 MongoClientSettings。

import com.mongodb.*;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;

import com.mongodb.connection.*;
import org.springframework.data.mongodb.core.MongoTemplate;

@Configuration
public class MongoConfig {

    //-- variables 

    @Bean(name = "mongoTemplate")
    public MongoTemplate getMongoTemplate(){
        MongoTemplate mongoTemplate = new MongoTemplate(getMongoClient(), mongoDatabaseName);
        return mongoTemplate;
    }

    private MongoClient getMongoClient(){
        List<ServerAddress> serverAddressList = new ArrayList<>();
        String[] hostPortList = mongoHostPortList.split(",");
        for (String serverAddress : hostPortList) {
            String[] hostPortArr = serverAddress.split(":");
            serverAddressList.add(new ServerAddress(hostPortArr[0], Integer.parseInt(hostPortArr[1])));
        }

        MongoClientSettings mongoSettingsProperties = getMongoClientSettings();
        MongoClient mongoClient = MongoClients.create(mongoSettingsProperties);
        return mongoClient;
    }

    private MongoClientSettings getMongoClientSettings() {
        return MongoClientSettings.builder()
                .applicationName(appName)
                .applyToSslSettings(sslBuilder ->
                        SslSettings.builder().
                                enabled(sslEnabled).
                                invalidHostNameAllowed(false).build())
                .applyToConnectionPoolSettings(connPoolBuilder ->
                        ConnectionPoolSettings.builder().
                                maxWaitTime(maxWaitTime, MILLISECONDS).
                                maxSize(connectionPoolMinSize).
                                maxSize(connectionPoolMaxSize).build())
                .applyToSocketSettings(socketBuilder ->
                        SocketSettings.builder().
                                connectTimeout(connectionTimeout,MILLISECONDS).build())
                .readPreference(ReadPreference.secondaryPreferred())
                .build();
    }
}

Above code is verified with dependencies -上面的代码通过依赖项进行了验证 -

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
        <version>2.3.1.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.11.2</version>
    </dependency>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM