当前位置: 首页 > 知识库问答 >
问题:

通过mongo java驱动程序java API设置Mongodb连接池选项

左丘弘致
2023-03-14

使用Morphia和mongo java驱动程序,我正在连接mongo服务器

MongoClientOptions.Builder builder = MongoClientOptions.builder();
        builder.sslEnabled(true);
        builder.sslInvalidHostNameAllowed(true);
        builder.maxConnectionIdleTime(0);
        MongoClientOptions sslOptions = builder.build();

        MongoClient mongoClient = new MongoClient(serverAddressList, Arrays.asList(mongoCredential), sslOptions);

其中serverAddressList是主机:端口列表和使用kerberos身份验证的mongoCredential创建为:

MongoCredential mongoCredential = MongoCredential.createGSSAPICredential("user@REALM.COM");

我想使用以下参数设置自定义连接池参数:

  1. maxPoolSize
  2. 最小池大小
  3. Maxidletimes等

为了实现这一点,我找到了ConnectionPoolSettings。建设者和com.mongodb.联系ConnectionPoolSettings类。

我在这里搜索了一个示例代码:

ConnectionPoolSettings connectionPoolSettings = ConnectionPoolSettings
                .builder()
                .minSize(MIN_MONGO_POOL_SIZE)
                .maxSize(MONGO_POOL_SIZE)
                .build();
        MongoClientSettings settings = MongoClientSettings
                .builder()
                .readPreference(MONGO_READ_PREFERENCE)
                .credentialList(credentialsList).clusterSettings(clusterSettings)
                .connectionPoolSettings(connectionPoolSettings).build();

有人能推荐一种应用这些设置的方法来获取MongoClient的实例吗?

正在使用的库:

dependencies {
    compile 'org.mongodb:mongodb-driver-sync:3.4.3'
  }

共有1个答案

蔡弘扬
2023-03-14

终于找到了设置连接池参数的正确方法,所以在这里回答了我自己的问题。

我在这里浏览了MongoClientations的源代码,其中connectionPool参数的设置如下:

connectionPoolSettings = ConnectionPoolSettings
                    .builder()
                    .minSize(getMinConnectionsPerHost())
                    .maxSize(getConnectionsPerHost())
                    .maxWaitQueueSize(getThreadsAllowedToBlockForConnectionMultiplier()
                    * getConnectionsPerHost())
                    .maxWaitTime(getMaxWaitTime(), MILLISECONDS)
                    .maxConnectionIdleTime(getMaxConnectionIdleTime(), MILLISECONDS)
                    .maxConnectionLifeTime(getMaxConnectionLifeTime(), MILLISECONDS)
                    .build();

我们可以看到minSize和maxSize值是从getMinConnectionsPerHost()获取的 getConnectionsPerHost() 方法。因此,要在客户端代码中更改和自定义连接池参数,我们只需将maxConnectionIdleTime和minConnectionsPerHost值添加到生成器中,如下所示:

MongoClientOptions.Builder builder = MongoClientOptions.builder();
    builder.maxConnectionIdleTime(0);
    builder.minConnectionsPerHost(50);
    builder.connectionsPerHost(200);
    MongoClientOptions sslOptions = builder.build();

此代码成功地打开了到mongodb服务器主机的最小指定连接。

LOG : 00:20:00,714 INFO  [org.mongodb.driver.connection] (pool-1-thread-1) Opened connection [connectionId{localValue:50}] to server.com:27180

 类似资料:
  • 我目前正在尝试使用C3P0作为我的JDBC连接池来设置Apache Ignite,但是我注意到由于Ignite驱动程序不支持事务,C3P0是不可用的。 有没有人幸运地用Ignite驱动程序获得了JDBC连接池?建议? 因此,如果我想建立一个JDBC连接池,我需要一个C3P0的替代方案;有什么建议吗?

  • 我们有一个复制设置,其中主节点,辅助节点和仲裁节点运行mongodb社区服务器v3.4.16。 我们正在使用jasperserver从mongoDB数据库生成100个报告。 最近,我们在连接到mongodb服务器时开始面临连接重置问题,因为报告会随机失败。 应用程序(jasperserver)和mongodb在同一个网络中,它们之间没有防火墙。 有人能提供任何指导来进一步调查根本原因,以便解决问题

  • 我试图理解Datastax Cassandra驱动程序中的连池,因此我可以更好地在我的Web服务中使用它。 我有留档的1.0版。它说: Java驱动程序异步使用连接,因此可以在同一个连接上同时提交多个请求。 他们通过连接理解什么?当连接到集群时,我们有:一个生成器、一个集群和一个会话。他们中的哪一个是连接? 例如,有一个参数: MaxSimultaneousRecestsPerConnection

  • 我们正在尝试使用nodejs/mongo原生驱动程序实现下面演示(幻灯片13-18)中概述的策略。 https://www.slideshare.net/mongodb/securing-mongodb-to-serve-an-awsbased-multitenant-securityfanatic-saas-application 总结: 从node.js.创建到mongoDB的连接池 对于租户

  • 我正在尝试使用本教程连接Oracle数据库。当我使用命令行:java-cp c:\jdbc-test\ojdbc6.jar;c:\jdbc-test OracleJDBC我已经将ojdbc6.jar与OracleJDBC.java放在同一个文件夹中。现在我需要在Eclipse上运行它,但它给我一个错误: 是因为OJDBC6.jar位置吗?

  • 任何人都可以帮助我将MongoDB驱动程序配置为JBoss中连接池的核心模块。请参阅我在阅读几篇文章后尝试的以下步骤。 EAP_HOME/modules/com/mongodb/main/ 创建了一个目录,并复制了 mongodb-driver-3.4.0-rc1.jar(rc1 版本,因为稳定版 3.3.0 不包含 MongoClientFactory.class)并创建了模块.xml文件,如下