У меня есть веб-приложение, которое использует 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