27

为 MongoDB 运行 Java 应用程序时出现以下异常:

[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 服务器。我正在使用远程主机并稍后设置它。在我关于 Mongo 的任何陈述之前发生了一个例外。

更新

这可能是一些Spring提供的 bean 访问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我自己...

更新2

我发现了相关问题:如何在 spring-boot 中禁用 spring-data-mongodb 自动配置

4

9 回答 9

57

我要在我的主要注释类中添加排除注释,

即代替

@SpringBootApplication

我应该

@SpringBootApplication
@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class})
于 2016-02-15T18:05:42.797 回答
6

尝试添加

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

进入application.properties.

如果 Mongo 没有在 localhost 上运行,这应该可以解决问题。

于 2018-03-28T08:16:56.720 回答
1

我不能肯定地说。这是一个信息不足的问题。

我可以这样说:默认情况下,Mongo 驱动程序会尝试连接到本地主机。可能您没有指定 Mongo 主机/端口。

因此,您必须配置 MongoDB 主机/端口/凭据(如果有的话)。

可能是网络相关问题或防火墙(尝试使用 cli 直接从您的机器连接到 MongoDB / 甚至运行仅使用 mongo 驱动程序的基本程序)。

从堆栈跟踪中,我没有看到 Spring 的任何用法,因此需要更多信息才能确定。

一般来说,您可以使用gradle dependencies命令分析 Gradle 中的依赖关系(请参阅此处)。

于 2016-02-15T17:45:52.753 回答
0

就我而言,错误是没有授权我的开发环境。所以我通过添加规则允许来自任何 IP 的连接(对于 prod env 来说不是一个好主意)0.0.0.0/0Network Access您可以从 atlas 仪表板的部分添加此规则。

于 2021-12-24T19:09:53.503 回答
0

我改变了范围(之前是测试)

<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>4.2.3</scope>
</dependency>
于 2021-06-23T07:23:14.043 回答
0

我的想法建议我这样做。

@SpringBootApplication(exclude = {MongoAutoConfiguration.class})
于 2021-07-23T04:18:25.770 回答
0

就我而言,我还没有在本地机器上安装 MongoDB。我安装了它,一切正常。

于 2021-02-14T20:47:24.210 回答
0

尝试将 MongoDB 与 spring-boot 连接时,我遇到了同样的异常。就我而言,我忘记@Configuration在我创建的 MongoDB 配置类中添加注释。

添加后它对我有用。

于 2021-04-09T15:54:45.720 回答
-3

您的服务器似乎没有运行。此外,如果它正在运行,它会在不同的端口上运行。

于 2016-02-15T17:36:09.950 回答