Исключение в потоке монитора при подключении к серверу 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. В моем случае я забыл добавить
После добавления это сработало для меня.
Для будущих искателей.
В моем случае это было вызвано тем, что сервер Mongo не принимал соединения с моего IP. Мне пришлось внести его в белый список в консоли MongoDB.
для springboot вы должны добавить следующую конфигурацию в ваше application.property
spring.data.mongodb.host=localhost(your mongo server)
spring.data.mongodb.port=27017(mongo port)
Кажется, ваш сервер не работает. Также, если он работает, он делает это на другом порту.