Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法在应用程序启动时使用MongoClient创建一组到mongodb的X连接?_Java_Mongodb_Mongo Java Driver - Fatal编程技术网

Java 有没有办法在应用程序启动时使用MongoClient创建一组到mongodb的X连接?

Java 有没有办法在应用程序启动时使用MongoClient创建一组到mongodb的X连接?,java,mongodb,mongo-java-driver,Java,Mongodb,Mongo Java Driver,我希望在应用程序启动时(即在应用程序开始传输流量之前)创建到mongodb的“X”个连接 MongoDB版本:4.0.11 Mongo Java驱动程序版本(maven):3.4.1 我尝试将“minConnectionsPerHost”设置为所需的数字,但当我执行代码时,它几乎无法打开1或2个连接。但是,当我在应用程序上加载时,连接计数会慢慢增加以适应流量。我想在我的应用程序开始使用流量之前创建这些连接 ServerAddress address = new ServerAdd

我希望在应用程序启动时(即在应用程序开始传输流量之前)创建到mongodb的“X”个连接

MongoDB版本:4.0.11

Mongo Java驱动程序版本(maven):3.4.1

我尝试将“minConnectionsPerHost”设置为所需的数字,但当我执行代码时,它几乎无法打开1或2个连接。但是,当我在应用程序上加载时,连接计数会慢慢增加以适应流量。我想在我的应用程序开始使用流量之前创建这些连接

        ServerAddress address = new ServerAddress("localhost", 27017);
        List<ServerAddress> serverAddresses = Arrays.asList(address);

        MongoCredential credential = 
        MongoCredential.createCredential("XXXX", "XXXX", 
              "XXXX".toCharArray());
        List<MongoCredential> mongoCredentials = 
              Arrays.asList(credential);

        MongoClientOptions clientOptions = 
              MongoClientOptions.builder().connectionsPerHost(100).
              minConnectionsPerHost(50).build();
        MongoClient mongoClient = new MongoClient(serverAddresses, 
              mongoCredentials, clientOptions);
ServerAddress=newserveraddress(“localhost”,27017);
List serverAddresses=Arrays.asList(地址);
MongoCredential凭证=
MongoCredential.createCredential(“XXXX”、“XXXX”,
“XXXX”.toCharArray());
列表mongoCredentials=
asList(凭证);
MongoClientOptions客户端选项=
MongoClientOptions.builder().connectionsPerHost(100)。
minConnectionsPerHost(50.build();
MongoClient MongoClient=新的MongoClient(服务器地址,
mongoCredentials、clientOptions);

有没有办法使用mongo java驱动程序实现这一点?

您可以在选项生成器中设置
minConnectionsPerHost()
,然后使用预热脚本创建多个连接。连接池将保持minConnectionsPerHost连接处于活动状态而不关闭

预热脚本可以有一个程序,该程序每主机生成2*minConnectionsPerHost线程数,这将连接并执行可能是一个虚拟读取操作。这样,连接将被打开,最小连接将保持活动状态


这似乎是一个肮脏的解决方案:-)但可能有效

你的意思是连接池?我认为它在内部已经为你创建了许多连接和队列。因此,如果一个连接正忙于获取信息,您的应用程序可以使用队列中的另一个连接来获取另一个信息。连接对象很重,这就是它们没有预先创建和保存的原因。连接池是数据库连接中常用的策略。为什么你觉得必须提前创建它?@FarazDurrani有办法验证这一点吗?当我解释mongo db上的服务器统计信息时,我只看到一个连接
db.serverStatus().connections{“current”:1,“available”:203,“totalCreated”:29,“active”:1}
@Vinil请查看此步骤