MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como se conectar ao cluster Atlas M0 (Free Tier) corretamente via driver Java?


Resolvido! Então, o que eu fiz:

  1. Tentei conectar-me apenas ao cluster de camada por meio do driver3.6 e escreveu

    mongodb+srv://user:@cluster0-ox90k.mongodb.net/test?retryWrites=true

Sempre recebo um erro: Connection strings must start with 'mongodb://' .

  1. Ok, excluí o snippet +srv e escrevi da mesma forma

    mongodb://user:@cluster0-ox90k.mongodb.net/test?retryWrites=true

e obter novamente o erro:
com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=cluster0-ox90k.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: cluster0-ox90k.mongodb.net}, caused by {java.net.UnknownHostException: cluster0-ox90k.mongodb.net}}]

Então, escrevi via driver3.4 ou anterior Como
mongodb://user:<PASSWORD>@cluster0-shard-00-00-ox90k.mongodb.net:27017,cluster0-shard-00-01-ox90k.mongodb.net:27017,cluster0-shard-00-02-ox90k.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true

e finalmente resolveu.

Observação:você pode obter essa string de conexão no console de gerenciamento do Atlas configurando seu driver Java para '3.4 ou posterior'. Isso ajudará você a evitar ter que criar a string de conexão por conta própria.

Atualizado: se você quiser usar drivers 3.7+ , você precisa escrever em vez de formatar a conexão (e para evitar meus problemas acima)
MongoClientURI uri = new MongoClientURI("mongodb+srv://admin:[email protected]/test?retryWrites=true");
MongoClient mongoClient = new MongoClient(uri);

outra variante usando MongoClients.create() (a partir da versão 3.7), e como mencionado aqui:
   MongoClient mongoClient = MongoClients.create("mongodb+srv://admin:[email protected]/test?retryWrites=true");

Observação: a senha precisa escrever não como mongodb://user:<mypassword>@... ,

apenas no formato mongodb://user:[email protected]

sem chaves <> .