Change default Mongo connection pool size in spring-boot

陌路散爱 提交于 2020-07-20 16:16:13

问题


I want to change the default size of connection pool provided by java mongodb driver which is 100 according to mongo docs.

Below is the mongo client bean which I used to customize the connection pool size (refered this question). 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.

@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!


回答1:


You can configure connection pool size via MongoDb uri parameters. Details - https://stackoverflow.com/a/50407284/6629515




回答2:


You can configure connection parameters by uri.

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




回答3:


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.

Most of the configurations that were earlier part of MongoClientOptions are moved to 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>


来源:https://stackoverflow.com/questions/47161050/change-default-mongo-connection-pool-size-in-spring-boot

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!