Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试将Java Spring应用程序连接到远程MongoDB时,打开套接字时出现异常,连接被拒绝_Java_Mongodb_Spring Boot_Gradle - Fatal编程技术网

尝试将Java Spring应用程序连接到远程MongoDB时,打开套接字时出现异常,连接被拒绝

尝试将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'

在尝试配置MongoDB之后,我一启动Spring启动项目就会看到java转储,所以在我添加任何代码之前。这是否意味着Spring正在尝试在应用程序启动时建立连接,而不是等待我打开连接

这只是一个本地测试环境。一个windows主机,我在Eclipse中运行Spring,在本地Ubuntu虚拟机上运行MongoDB,否则我可以访问它

我在用Gradle,build.Gradle

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声称它已连接。酷。