wan*_*nix 5 java spring mongodb mongo-java-driver
我想更改 java mongodb 驱动程序提供的连接池的默认大小,根据 mongo docs 为 100。
下面是我用来自定义连接池大小的 mongo 客户端 bean(参考这个问题)。我将 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;
}
Run Code Online (Sandbox Code Playgroud)
然后我计算了每个工作线程的开始和结束时间点。这样我就可以确定线程正在并行工作,并且这些配置没有改变我的连接池大小。有人可以帮我解决这个问题吗?任何帮助将不胜感激!
Nam*_*ind 14
您可以通过uri配置连接参数。
spring.data.mongodb.uri=mongodb://localhost:27017/?connectTimeoutMS=300000&minPoolSize=0&maxPoolSize=10&maxIdleTimeMS=900000
其他参数请参见以下文档。
https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options
小智 5
随着更新的 Spring boot(2.0.0 +) 和 Mongo DB java(3.9 +) 驱动程序版本,以下代码可用于在 Spring Boot 中创建可配置的 mongo 模板。
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();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码通过依赖项进行了验证 -
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20321 次 |
| 最近记录: |