복붙노트

[MONGODB] 어떻게 클러스터 제대로 자바 드라이버를 통해 아틀라스 M0 (무료 계층)에 연결?

MONGODB

어떻게 클러스터 제대로 자바 드라이버를 통해 아틀라스 M0 (무료 계층)에 연결?

MongoDB의 버전 3.6을 사용하여 Java 드라이버를 통해 아틀라스 클러스터를 연결하는 시도.

그래서, 내가 좋아하는 쓰고 있어요 :

 MongoClientURI uri = new MongoClientURI("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
 MongoClient mongoClient = new MongoClient(uri);

이 경우 오류는 다음과 같습니다

java.lang.IllegalArgumentException: The connection string is invalid. Connection strings must start with 'mongodb://'
    at com.mongodb.ConnectionString.<init>(ConnectionString.java:203)
    at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:176)
    at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:158)
    at project.Bot.check(Bot.java:30)
    at project.Bot.onUpdateReceived(Bot.java:104)
    at java.util.ArrayList.forEach(ArrayList.java:1249)
    at org.telegram.telegrambots.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27)
    at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:309)

이 프로그램은 + SRV없이 MongoDB를 버전 3.6 이상을 사용하는 조각으로 시작하는 경우 :

MongoClientURI uri = new MongoClientURI("mongodb://admin1:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
MongoClient mongoClient = new MongoClient(uri);

나는 오류를 받고 있어요 :

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.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: cluster0.mongodb.net}, caused by {java.net.UnknownHostException: cluster0.mongodb.net}}]
    at com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster.java:369)
    at com.mongodb.connection.BaseCluster.selectServer(BaseCluster.java:101)
    at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:75)
    at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:71)
    at com.mongodb.binding.ClusterBinding.getReadConnectionSource(ClusterBinding.java:63)
    at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:201)
    at com.mongodb.operation.CountOperation.execute(CountOperation.java:206)
    at com.mongodb.operation.CountOperation.execute(CountOperation.java:53)
    at com.mongodb.Mongo.execute(Mongo.java:772)
    at com.mongodb.Mongo$2.execute(Mongo.java:759)
    at com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:185)
    at com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:170)
    at project.Bot.check(Bot.java:36)
    at project.Bot.onUpdateReceived(Bot.java:103)
    at java.util.ArrayList.forEach(ArrayList.java:1249)
    at org.telegram.telegrambots.generics.LongPollingBot.onUpdatesReceived(LongPollingBot.java:27)
    at org.telegram.telegrambots.updatesreceivers.DefaultBotSession$HandlerThread.run(DefaultBotSession.java:309)

POM 파일에서 나는 종속성이 :

        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.6.0</version>
        </dependency>

//127.0.0.1 : 27017,하지만 나는이 아니 클러스터에 경로를 추가 내가 몽고 내 데이터베이스를 시작하고 경우이 주소 MongoDB에 추가됩니다. 어쩌면 내가 콘크리트 클러스터 또는 경로를 작성해야?

년 OFC, 내가 관리 사용자가 있습니다. 또한, 내 클러스터와 쉘에서 나침반을 통해 연결할 수 있습니다. mongod 프로세스가 시작됩니다. 내가 IDE에서 실행하고있을 때이 오류 만 나타납니다. 아마 여기에 같은 문제를 해결합니다.

사람이 오류를 해결하는 방법을 알고 있나요? 난 어떤 도움을 주셔서 감사합니다.

해결법

  1. ==============================

    1.그것을 해결! 그래서, 내가 무슨 짓을했는지 :

    그것을 해결! 그래서, 내가 무슨 짓을했는지 :

    1) 나는 driver3.6를 통해 계층 클러스터에 연결 만 시도 썼다

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

    나는 항상 오류 : 연결 문자열은 ': // MongoDB를'로 시작해야합니다.

    2) 좋아, 나는 조각 + SRV를 삭제하고 같은 방법을 썼다

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

    다시 오류가 발생합니다 :

    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}}]
    

    그래서, driver3.4 또는 같은 이전을 통해 썼다

    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
    

    그리고 마지막으로는 해결했다.

    업데이트 : 당신은 3.6 드라이버를 사용하려는 경우, 당신은 대신 형식 연결의 작성 (이상 내 문제를 방지하기 위해) 필요

    MongoClientURI uri = new MongoClientURI("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
    MongoClient mongoClient = new MongoClient(uri);
    

    이 변형 (감사 케빈 Adistambha) :

       MongoClient mongoClient = MongoClients.create("mongodb+srv://admin:mypassword@cluster0-ox90k.mongodb.net/test?retryWrites=true");
    

    참고 : 암호 필요하지 MongoDB를 같이 쓰기 : // 사용자 : @ ...,

    단지 형식 MongoDB의에서 : // 사용자 : mypassword @ ...

    중괄호가없는 <>.

  2. ==============================

    2.여기에 몇 가지 문제가 될 것 같다

    여기에 몇 가지 문제가 될 것 같다

    먼저

    3.6.0 실제로 애플리케이션 클래스 패스에로드 된 몽고 드라이버 라이브러리가 아닌; 난 당신이 이전에 이전 버전으로 테스트하고, 최근 POM을 업데이트 된 것으로 의심? 당신은 이전 버전 3.2.0를 사용하고 있었다.

    이걸 어떻게 알 수 있습니까?

    나는 코드를 통해 파고 시작하고, 버전 3.6.0에서, 사용자가 제공 한 오류 메시지 곳 근처 라인 (203)입니다 또한, 당신은 연결 코드 위는 +의 SRV에 대한 지원을하고 있음을 볼 수 있습니다.

    이전 릴리스를 통해 다시 불고, 나는 마침내 릴리스 3.2.0에서, 라인 (203)에 그 오류 massge를 발견했다.

    메이븐의 청소를하고 노력하고 긴 이야기를 짧게하고, 다시.

    프로젝트 새로 고침 도움이되지 않는 경우 새 종속성을 데리러 이클립스를 다시 실행합니다.

    둘째

    이것은 하나의 방화벽이 당신의 아틀라스 클러스터에 도달에서 패킷을 차단한다는 점에서 가능성이 높은 방화벽 / 액세스 제어 그룹 구성 문제입니다.

    화이트리스트에 주소를 추가하십시오.

  3. from https://stackoverflow.com/questions/50916467/how-to-connect-to-atlas-m0-free-tier-cluster-correctly-via-java-driver by cc-by-sa and MIT license