首页 > 解决方案 > 不推荐使用带有 mongoDB 副本集“MongoClient”的 java API

问题描述

我正在使用 java API 连接到具有副本集的 mongodb,例如

ServerAddress serverAddress1 = new ServerAddress("10.28.136.83",37000);
ServerAddress serverAddress2 = new ServerAddress("10.28.136.84",37000);
ServerAddress serverAddress3 = new ServerAddress("10.28.136.85",37000);

                addressLists.add(serverAddress1);
                addressLists.add(serverAddress2);
                addressLists.add(serverAddress3);
                credentials = MongoCredential.createScramSha1Credential("root", "admin", "root".toCharArray());
                credentialsLists.add(credentials);
                mongoClient = new MongoClient(addressLists, credentialsLists);

它有效,但MongoClient 表明它已被弃用。

 /** @deprecated */
    @Deprecated
    public MongoClient(ServerAddress addr, List<MongoCredential> credentialsList) {
        this(addr, credentialsList, MongoClientOptions.builder().build());
    }

我想问一下连接到 mongodb 副本集的最新方法是什么。或任何更好的解决方案

标签: mongodb

解决方案


我同意@dnickless 的回答,但要确定:在您的情况下,您将ServerAddress列表(因为这是一个副本集)和MongoCredential列表传递给 mongo 的 ctor 。所以根据文档(3.7版),你应该使用一个接受相同服务器列表的ctor,但只有一个MongoCredential,(加上添加MongoOptions ...)

这就是你使用的:

@Deprecated
public MongoClient​(List<ServerAddress> seeds,
                   List<MongoCredential> credentialsList)
Deprecated. Prefer MongoClient(List, MongoCredential, MongoClientOptions)

所以这是你需要的:

public MongoClient​(List<ServerAddress> seeds,
                   MongoCredential credential,
                   MongoClientOptions options)

其中 credential - 用于验证所有连接的凭据


推荐阅读