Как подключить Mongodb Atlas к весне - PullRequest
1 голос
/ 25 февраля 2020

У меня есть веб-приложение, которое использует Spring Boot для обработки логики бэкэнда. Я пытаюсь интегрировать mongodb, чтобы отслеживать некоторую информацию о пользователях этого веб-приложения. Я создал базу данных на mongodb Atlas и через Mon go Shell соединение проходит нормально. Проблема возникает, когда я пытаюсь подключиться к Spring. Позвольте мне показать вам все детали

Внутри Atlas я добавил этот IP-адрес (0.0.0.0/0 (включая ваш текущий IP-адрес)) в Security> Network Address. Теоретически это должно позволить мне подключаться к базе данных с любого IP-адреса.

Затем я создал коллекцию под названием «test».

Если я нажму на свой кластер, а затем на кнопку подключения , спросите меня, с какой модальностью я хочу соединиться. Я выбираю «Подключить приложение», а затем мне нужно выбрать драйвер и версию. Я выбираю соответственно "Java" и "3.6 или позже" (я не уверен, что это правильная версия, альтернативы 3.4 или 3.3). И, наконец, он показывает строку подключения:

mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retryWrites=true&w=majority

Для подключения к Atlas с помощью Spring я использую эту зависимость

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
</dependency>

Внутри файла application.properties у меня есть эти две строки для настройки пн go.

spring.data.mongodb.host=mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retryWrites=true&w=majority
spring.data.mongodb.port=27017

Вместо пароля, который я поставил по понятным причинам.

Единственная проблема заключается в том, что при запуске Spring Boot я продолжаю получать эту ошибку сообщение:

2020-02-25 16:31:25.605  INFO 41162 --- [=majority:27017] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retrywrites=true&w=majority:27017

com.mongodb.MongoSocketException: mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retrywrites=true&w=majority: nodename nor servname provided, or not known
    at com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:188) ~[mongo-java-driver-3.6.4.jar:na]
    at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:59) ~[mongo-java-driver-3.6.4.jar:na]
    at com.mongodb.connection.SocketStream.open(SocketStream.java:57) ~[mongo-java-driver-3.6.4.jar:na]
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:126) ~[mongo-java-driver-3.6.4.jar:na]
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114) ~[mongo-java-driver-3.6.4.jar:na]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Caused by: java.net.UnknownHostException: mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retrywrites=true&w=majority: nodename nor servname provided, or not known
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_111]
    at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_111]
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_111]
    at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[na:1.8.0_111]
    at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_111]
    at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_111]
    at java.net.InetAddress.getByName(InetAddress.java:1076) ~[na:1.8.0_111]
    at com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:186) ~[mongo-java-driver-3.6.4.jar:na]
    ... 5 common frames omitted

Я не знаю, что делать, чтобы это работало. Я что-то упустил?

РЕШЕНИЕ

Как и предположил @barrypicker, проблема была в файле свойств. Вместо того чтобы использовать spring.data.mongodb.host, я использовал spring.data.mongodb.uri. Теперь он работает отлично.

spring.data.mongodb.uri=mongodb+srv://admin:<password>@umadit-obxpb.mongodb.net/test?retryWrites=true&w=majority

даже без spring.data.mongodb.port

...