我想根据mongo docs更改java mongodb驱动程序提供的连接池的默认大小,这是100。
下面是我用来自定义连接池大小的mongo客户端bean(引用this question)。我将min和max connectionPerHost属性都设置为1,并运行10个与DB交互的并行工作线程,以确保应用我的更改。
@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;
}
然后我计算了每个工作线程的起始和结束时间点。所以我确定线程并行工作,并且我的连接池大小没有被这些配置改变。 有人可以帮我解决这个问题吗?任何帮助都将受到高度赞赏!
答案 0 :(得分:1)
您可以通过MongoDb uri参数配置连接池大小。详情 - https://stackoverflow.com/a/50407284/6629515
答案 1 :(得分:1)
您可以通过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
答案 2 :(得分:0)
使用更新的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();
}
}
以上代码已通过依赖性验证-
<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>