Spring 引导和 mongo 数据库中的连接池

Connection pooling in Spring Boot and mongo db

我正在查看 spring 启动应用程序和 mongoDb 连接 POC。 我添加了以下依赖项:

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

我还浏览了具有属性的 mongoB 属性:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

请问我们这里如何定义连接池机制?

您不能直接使用应用程序属性执行此操作。您需要使用 MongoClientOptions 来配置连接池的各个方面。

查看 documentation 了解各种可用选项。

这是一个简单的例子。

@Bean(name="mongoTempl")
public MongoTemplate mongoTempl() throws Exception {
     return new MongoTemplate(createMongoClient(new ServerAddress(host, port))
                              ,dbName);
}


Mongo createMongoClient(ServerAddress serverAddress) {
final MongoClientOptions options = MongoClientOptions.builder()
        .threadsAllowedToBlockForConnectionMultiplier(...)
        .connectionsPerHost(...)
        .connectTimeout(...)
        .maxWaitTime(...)
        .socketKeepAlive(...)
        .socketTimeout(...)
        .heartbeatConnectTimeout(...)
        .minHeartbeatFrequency(...)
        .build();

        return new MongoClient(serverAddress, options);
}

您也可以像这样使用 MongoClientSettingsBuilderCustomizer spring sample

@Bean
public MongoClientSettingsBuilderCustomizer customizer() {
    return (builder) -> builder.applyToConnectionPoolSettings(
            (connectionPool) -> {
                connectionPool.maxSize(10);
                connectionPool.minSize(2);
                connectionPool.maxConnectionIdleTime(5, TimeUnit.MINUTES);
                connectionPool.maxWaitTime(2, TimeUnit.MINUTES);
                connectionPool.maxConnectionLifeTime(30, TimeUnit.MINUTES);
                connectionPool.addConnectionPoolListener();
            });
}