尝试将Java Spring应用程序连接到远程MongoDB时,打开套接字时出现异常,连接被拒绝
在尝试配置MongoDB之后,我一启动Spring启动项目就会看到java转储,所以在我添加任何代码之前。这是否意味着Spring正在尝试在应用程序启动时建立连接,而不是等待我打开连接 这只是一个本地测试环境。一个windows主机,我在Eclipse中运行Spring,在本地Ubuntu虚拟机上运行MongoDB,否则我可以访问它 我在用Gradle,build.Gradle尝试将Java Spring应用程序连接到远程MongoDB时,打开套接字时出现异常,连接被拒绝,java,mongodb,spring-boot,gradle,Java,Mongodb,Spring Boot,Gradle,在尝试配置MongoDB之后,我一启动Spring启动项目就会看到java转储,所以在我添加任何代码之前。这是否意味着Spring正在尝试在应用程序启动时建立连接,而不是等待我打开连接 这只是一个本地测试环境。一个windows主机,我在Eclipse中运行Spring,在本地Ubuntu虚拟机上运行MongoDB,否则我可以访问它 我在用Gradle,build.Gradle plugins { id 'org.springframework.boot' version '2.4.5'
plugins {
id 'org.springframework.boot' version '2.4.5'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.benW'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
ext {
mapstructVersion = "1.4.2.Final"
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-artemis'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
implementation("org.mapstruct:mapstruct:${mapstructVersion}")
compileOnly "org.mapstruct:mapstruct-processor:${mapstructVersion}"
annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
testAnnotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
implementation('org.springframework.boot:spring-boot-starter-data-mongodb')
testImplementation('de.flapdoodle.embed:de.flapdoodle.embed.mongo')
}
test {
useJUnitPlatform()
}
下面是我添加到application.properties文件中的内容:
spring.data.mongodb.host=192.168.56.102
spring.data.mongodb.port=27017
spring.data.mongodb.database=k2_dev
spring.data.mongodb.username=test
spring.data.mongodb.password=password
logging.level.org.springframework.data.mongodb.core.MongoTemplate: DEBUG
我可以登录到MangoDB实例。我创建了用户
> show users
{
"_id" : "k2_dev.test",
"userId" : UUID("8e9e3085-2f33-41f4-8722-8b6c879efaed"),
"user" : "test",
"db" : "k2_dev",
"roles" : [
{
"role" : "readWrite",
"db" : "k2_dev"
},
{
"role" : "dbAdmin",
"db" : "k2_dev"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
我还确保端口已打开
:~$ sudo lsof -i -P -n | grep LISTEN
systemd-r 647 systemd-resolve 13u IPv4 22537 0t0 TCP 127.0.0.53:53 (LISTEN)
sshd 710 root 3u IPv4 24052 0t0 TCP *:22 (LISTEN)
sshd 710 root 4u IPv6 24054 0t0 TCP *:22 (LISTEN)
mongod 16172 mongodb 11u IPv4 137179 0t0 TCP 127.0.0.1:27017 (LISTEN)
任何关于我在这里做错了什么的建议都将不胜感激。幸运的是,我已经通过了一些指南和其他问题。谢谢
以下是标准输出:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.5)
2021-04-27 22:11:47.805 INFO 34344 --- [ main] c.b.R.RestClientPocApplication : Starting RestClientPocApplication using Java 11.0.9 on PSPLT-F7VYYY2 with PID 34344 (C:\Users\Bwarrick\Workspaces\Java\RESTClientPOC\bin\main started by Bwarrick in C:\Users\Bwarrick\Workspaces\Java\RESTClientPOC)
2021-04-27 22:11:47.809 INFO 34344 --- [ main] c.b.R.RestClientPocApplication : No active profile set, falling back to default profiles: default
2021-04-27 22:11:48.348 INFO 34344 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.
2021-04-27 22:11:48.360 INFO 34344 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 9 ms. Found 0 MongoDB repository interfaces.
2021-04-27 22:11:49.890 INFO 34344 --- [ main] org.mongodb.driver.cluster : Cluster created with settings {hosts=[192.168.56.102:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms'}
2021-04-27 22:11:51.222 INFO 34344 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8080
2021-04-27 22:11:51.412 INFO 34344 --- [ main] c.b.R.RestClientPocApplication : Started RestClientPocApplication in 3.978 seconds (JVM running for 5.351)
2021-04-27 22:11:51.946 INFO 34344 --- [68.56.102:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server 192.168.56.102:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-4.1.2.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:143) ~[mongodb-driver-core-4.1.2.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:188) ~[mongodb-driver-core-4.1.2.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144) ~[mongodb-driver-core-4.1.2.jar:na]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: java.net.ConnectException: Connection refused: connect
at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method) ~[na:na]
at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107) ~[na:na]
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) ~[na:na]
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) ~[na:na]
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) ~[na:na]
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) ~[na:na]
at java.base/java.net.Socket.connect(Socket.java:608) ~[na:na]
at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:78) ~[mongodb-driver-core-4.1.2.jar:na]
at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-4.1.2.jar:na]
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-4.1.2.jar:na]
... 4 common frames omitted
问题是mongo db正在VM上的本地主机上侦听。有必要在VM中调整绑定的主机/端口
$ sudo lsof -i -P -n | grep LISTEN
systemd-r 647 systemd-resolve 13u IPv4 22537 0t0 TCP 127.0.0.53:53 (LISTEN)
sshd 710 root 3u IPv4 24052 0t0 TCP *:22 (LISTEN)
sshd 710 root 4u IPv6 24054 0t0 TCP *:22 (LISTEN)
mongod 16172 mongodb 11u IPv4 137179 0t0 TCP 127.0.0.1:27017 (LISTEN)
请注意,虚拟机上mongod的侦听端口是127.0.0.1:27017
在/etc/mongod.conf中,允许
bindIp
不仅仅具有127.0.0.1
问题在于mongo db正在VM上的本地主机上侦听。有必要在VM中调整绑定的主机/端口
$ sudo lsof -i -P -n | grep LISTEN
systemd-r 647 systemd-resolve 13u IPv4 22537 0t0 TCP 127.0.0.53:53 (LISTEN)
sshd 710 root 3u IPv4 24052 0t0 TCP *:22 (LISTEN)
sshd 710 root 4u IPv6 24054 0t0 TCP *:22 (LISTEN)
mongod 16172 mongodb 11u IPv4 137179 0t0 TCP 127.0.0.1:27017 (LISTEN)
请注意,虚拟机上mongod的侦听端口是127.0.0.1:27017
在/etc/mongod.conf中,允许
bindIp
拥有的不仅仅是127.0.0.1
,当您将jar放在类路径上时,SpringBoot将尝试打开一个连接。端口可能已打开,但您已硬编码了IP,是否确定正确?您可以使用解析为127.0.0.1
的localhost
或home,基本上总是运行代码的机器。但是,如果您在docker中运行Mongo,它将不起作用。Mongo在VM上运行,没有容器。IP是正确的。我用SSH连接到它,可以访问MongoDB。可能是防火墙造成的?还是Mongo听ip<代码>0.0.0.0:27017防火墙处于非活动状态。它只是一个本地VM…当您将jar放在类路径上时,SpringBoot将尝试打开一个连接。端口可能已打开,但您已硬编码了IP,是否确定正确?您可以使用解析为127.0.0.1
的localhost
或home,基本上总是运行代码的机器。但是,如果您在docker中运行Mongo,它将不起作用。Mongo在VM上运行,没有容器。IP是正确的。我用SSH连接到它,可以访问MongoDB。可能是防火墙造成的?还是Mongo听ip<代码>0.0.0.0:27017防火墙处于非活动状态。这只是一个本地虚拟机…谢谢KevinO。我找到了设置并添加了IP:bindIp:127.0.0.1192.168.56.102,Mongo和Spring声称它已连接。太好了,谢谢你,凯维诺。我找到了设置并添加了IP:bindIp:127.0.0.1192.168.56.102,Mongo和Spring声称它已连接。酷。