Java MongoDB 连接池配置指南
在 Java 应用程序中使用 MongoDB 时,正确配置连接池对于性能和资源管理至关重要,以下是 MongoDB 连接池的详细配置和使用方法。

使用 MongoDB Java Driver 的内置连接池
MongoDB Java Driver 3.12+ 版本内置了连接池功能,推荐使用。
基本配置示例
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
public class MongoConnectionPoolExample {
public static void main(String[] args) {
// 服务器地址配置
ServerAddress serverAddress = new ServerAddress("localhost", 27017);
// 认证信息(如果需要)
MongoCredential credential = MongoCredential.createCredential(
"username",
"databaseName",
"password".toCharArray()
);
// 连接池配置
MongoClientSettings settings = MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(serverAddress)))
.credential(credential)
.applyToSocketSettings(builder ->
builder.connectTimeout(10, TimeUnit.SECONDS))
.applyToConnectionPoolSettings(builder ->
builder.maxSize(100) // 最大连接数
.minSize(10) // 最小连接数
.maxWaitTime(1200, TimeUnit.SECONDS) // 获取连接最大等待时间
.maxConnectionIdleTime(600, TimeUnit.SECONDS) // 连接最大空闲时间
.maxConnectionLifeTime(1200, TimeUnit.SECONDS)) // 连接最大生命周期
.build();
// 创建 MongoClient
MongoClient mongoClient = MongoClients.create(settings);
// 使用 mongoClient...
// 关闭连接
mongoClient.close();
}
}
连接池参数说明
maxSize: 连接池中最大连接数minSize: 连接池中最小连接数maxWaitTime: 当连接池耗尽时,获取连接的最大等待时间maxConnectionIdleTime: 连接在池中的最大空闲时间,超时后将被回收maxConnectionLifeTime: 连接的最大生命周期,超时后将被关闭
使用第三方连接池(如 HikariCP)
虽然 MongoDB Java Driver 已经内置了连接池,但如果你更喜欢使用 HikariCP 这样的流行连接池,可以通过以下方式集成:
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class HikariMongoConnectionPool {
public static void main(String[] args) {
// MongoDB 连接字符串
String mongoUri = "mongodb://username:password@localhost:27017/databaseName";
// HikariCP 配置
HikariConfig config = new HikariConfig();
config.setJdbcUrl("mongodb://localhost:27017"); // HikariCP 不直接支持 MongoDB,需要适配
config.setUsername("username");
config.setPassword("password");
config.setMaximumPoolSize(100);
config.setMinimumIdle(10);
config.setConnectionTimeout(12000);
config.setIdleTimeout(600000);
config.setMaxLifetime(1200000);
// 创建数据源
HikariDataSource dataSource = new HikariDataSource(config);
// 使用时获取 MongoClient
try (MongoClient mongoClient = new MongoClient(
new MongoClientURI(dataSource.getJdbcUrl()))) {
// 使用 mongoClient...
} finally {
dataSource.close();
}
}
}
注意:HikariCP 主要是为关系型数据库设计的,直接用于 MongoDB 可能不够优雅,建议优先使用 MongoDB Driver 内置的连接池。
Spring Boot 中的 MongoDB 连接池配置
在 Spring Boot 应用中,可以通过 application.properties 或 application.yml 配置连接池:

application.properties 示例
# MongoDB 连接配置 spring.data.mongodb.uri=mongodb://username:password@localhost:27017/databaseName # 连接池配置 spring.data.mongodb.client.min-connection-per-host=10 spring.data.mongodb.client.max-connection-per-host=100 spring.data.mongodb.client.connection-timeout=12000 spring.data.mongodb.client.socket-timeout=60000 spring.data.mongodb.client.max-connection-idle-time=600000 spring.data.mongodb.client.max-connection-life-time=1200000
application.yml 示例
spring:
data:
mongodb:
uri: mongodb://username:password@localhost:27017/databaseName
client:
min-connection-per-host: 10
max-connection-per-host: 100
connection-timeout: 12000
socket-timeout: 60000
max-connection-idle-time: 600000
max-connection-life-time: 1200000
最佳实践
- 合理设置连接池大小:根据应用并发量和服务器资源设置合适的连接池大小
- 设置超时参数:避免因连接问题导致应用长时间阻塞
- 监控连接池:定期监控连接池的使用情况,及时调整配置
- 关闭资源:确保在应用关闭时正确关闭 MongoClient 和连接池
- 使用连接池工厂:对于大型应用,考虑使用连接池工厂模式管理 MongoClient 实例
常见问题排查
- 连接泄漏:确保在使用完连接后正确关闭
- 连接耗尽:检查连接池配置是否合理,是否有未释放的连接
- 性能问题:监控连接等待时间,适当调整连接池大小
- 认证失败:检查用户名、密码和认证数据库是否正确
通过合理配置和使用 MongoDB 连接池,可以显著提高 Java 应用程序与 MongoDB 交互的性能和稳定性。

