运行 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
提供的 beans 访问 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
我发现相关问题:How to disable spring-data-mongodb autoconfiguration in spring-boot
我要向我的主注释类添加排除注释,
即而不是
@SpringBootApplication
我应该有
@SpringBootApplication
@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class})
尝试添加
spring.data.mongodb.host=hostIpOnWhichMongoIsRunning
spring.data.mongodb.port=27017
进入
application.properties
。
如果 Mongo 没有在本地主机上运行,这应该可以解决问题。
我的想法建议我这样做。
@SpringBootApplication(exclude = {MongoAutoConfiguration.class})
就我而言,错误在于没有授权我的开发环境。因此,我通过添加规则
0.0.0.0/0
来允许来自任何 IP 的连接(对于产品环境来说不是一个好主意)。您可以从 atlas 仪表板的 Network Access
部分添加此规则。
我不能肯定地说。这是一个信息不足的问题。
我可以说:Mongo 驱动程序默认尝试连接到本地主机。 可能您还没有指定 Mongo 主机/端口。
因此,您必须配置 MongoDB 主机/端口/凭据(如果有的话)。
也许是网络相关问题或防火墙(尝试使用 cli 直接从您的计算机连接到 MongoDB / 甚至运行仅使用 mongo 驱动程序的基本程序)。
从堆栈跟踪中我没有看到 Spring 的任何用法,因此需要更多信息才能确定。
一般来说,你可以使用
gradle dependencies
命令来分析 Gradle 中的依赖关系(参见这里)。
在尝试使用 spring-boot 连接 MongoDB 时,我遇到了同样的异常。 就我而言,我忘记在我创建的 MongoDB 配置类中添加
@Configuration
注释。
添加此后,它对我有用。
我改变了范围(之前是测试)
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>4.2.3</scope>
</dependency>
在我的例子中,mongoDB 内部端口未映射到外部。使用命令
docker run -p 27017:27017 -d mongo
解决了我的问题。
使用cmd“mongo”检查您的mongo,如果mongo已死亡,请按照步骤操作 1:打开搜索窗口 2:搜索“服务” 3: 找到 MongoDB Service 并右键单击,然后在弹出窗口中单击启动
就我而言,解决方法是:
@EnableAutoConfiguration(exclude={MongoReactiveAutoConfiguration.class})
对于未来的搜索者。
就我而言,这是由于 Mongo 服务器不接受来自我的 IP 的连接造成的。我必须在 MongoDB 控制台中将其列入白名单。
您的服务器似乎没有运行。 此外,如果它正在运行,它是在不同的端口上运行的。