Исключение в потоке монитора при подключении к серверу localhost:27017 при доступе к MongoDB с Java

У меня есть следующее исключение при запуске Java-приложения для MongoDB:

[localhost:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server localhost:27017 while accessing MongoDB with Java

Стек вызовов выглядит следующим образом:

com.mongodb.MongoSocketOpenException: Exception opening socket
    at com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongodb-driver-core-3.0.4.jar:na]
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) ~[mongodb-driver-core-3.0.4.jar:na]
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127) ~[mongodb-driver-core-3.0.4.jar:na]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_45]
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_45]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345) ~[na:1.8.0_45]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_45]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_45]
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_45]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_45]
    at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_45]
    at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) ~[mongodb-driver-core-3.0.4.jar:na]
    at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongodb-driver-core-3.0.4.jar:na]
    ... 3 common frames omitted

Ни одно из этих имен не относится к моему заявлению. Также у меня нет сервера MONGODB на локальном хосте. Я использую удаленный хост и настраиваю его позже. Исключение происходит ДО любого из моих утверждений относительно Монго.

ОБНОВИТЬ

Это наверное какой то Spring при условии доступа к бобам Mongo, Как их отключить?

Мой конфиг содержит следующие зависимости:

dependencies {
    compile('javax.media:jai_core:1.1.3')
    //compile('jai_core:1.1.3')

//  compile('org.springframework.boot:spring-boot-starter-data-mongodb')
    compile('org.mongodb:mongodb-driver:3.0.4')
    compile('org.mongodb:bson:3.0.4')

    compile('org.geotools:gt-api:14.2')
    compile('org.geotools:gt-shapefile:14.2')
    compile('org.geotools:gt-geometry:14.2')
    compile('org.geotools:gt-referencing:14.2')
    compile('org.geotools:gt-geojson:14.2')
    compile('org.geotools:gt-mongodb:14.2')

    compile('org.springframework.boot:spring-boot-starter-web')
    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
    testCompile('org.springframework.boot:spring-boot-starter-test') 
}

т.е. я удалил org.springframework.boot:spring-boot-starter-data-mongodb и думал будет использовать Mongo себя...

UPDATE2

Я нашел связанный вопрос: Как отключить автоконфигурирование spring-data-mongodb в spring-boot

14 ответов

Решение

Я должен был добавить аннотацию исключения к своему основному аннотированному классу,

т.е. вместо

@SpringBootApplication

мне следует иметь

@SpringBootApplication
@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class})

Попробуйте добавить

spring.data.mongodb.host=hostIpOnWhichMongoIsRunning spring.data.mongodb.port=27017

в application.properties. если Монго не работает на локальном хосте, это должно решить проблему.

Моя ИДЕЯ предлагала мне это сделать.

      @SpringBootApplication(exclude = {MongoAutoConfiguration.class})

В моем случае ошибка заключалась в том, что я не авторизовал свою среду разработки. Поэтому я разрешил подключения с любого IP (не очень хорошая идея для prod env), добавив правило 0.0.0.0/0. Вы добавляете это правило из Network Accessраздел с панели управления атласа.

Я не могу сказать точно. Это своего рода недостаточно информационный вопрос.

Я могу сказать, что: драйвер Монго по умолчанию пытается подключиться к локальному хосту. Возможно, вы не указали хост / порт mongo.

Так что вам придется настроить хост / порт / учетные данные mongo db (если они у вас есть).

Может быть, проблема, связанная с сетью, или брандмауэр (попробуйте подключиться к mongo db со своей машины напрямую с помощью cli / даже при запуске базовой программы, которая использует только драйвер mongo).

Из трассировки стека я не вижу никакого использования пружины, поэтому требуется больше информации, чтобы сказать наверняка.

В общем, вы можете анализировать зависимости в Gradle, используя gradle dependencies команда (см. здесь)

Надеюсь это поможет

В моем случае исправление следующее:

      @EnableAutoConfiguration(exclude={MongoReactiveAutoConfiguration.class})

В моем случае внутренний порт mongoDB не был сопоставлен с внешним. Использование команды docker run -p 27017:27017 -d mongoрешил мою проблему.

проверьте свой монго с помощью cmd «mongo», если монго мертв, выполните шаг 1: откройте окно поиска 2: найдите «услуги» 3: найдите службу MongoDB и щелкните правой кнопкой мыши, затем нажмите «Пуск» во всплывающем окне.

Я изменил прицел (раньше это был тест)

      <dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>4.2.3</scope>
</dependency>

в моем случае я еще не установил MongoDB на свой локальный компьютер. Я установил и все заработало.

У меня было такое же исключение при попытке подключить MongoDB с помощью spring-boot. В моем случае я забыл добавить аннотация в созданном мной классе конфигурации MongoDB.

После добавления это сработало для меня.

Для будущих искателей.

В моем случае это было вызвано тем, что сервер Mongo не принимал соединения с моего IP. Мне пришлось внести его в белый список в консоли MongoDB.

для springboot вы должны добавить следующую конфигурацию в ваше application.property

      spring.data.mongodb.host=localhost(your mongo server)
spring.data.mongodb.port=27017(mongo port)

Кажется, ваш сервер не работает. Также, если он работает, он делает это на другом порту.

Другие вопросы по тегам