当前位置: 首页 > 知识库问答 >
问题:

带有嵌入式Mongo的Spring Boot:无法分配请求的地址:JVM_Bind

华子航
2023-03-14

我正在尝试为嵌入Mongo&Kafka的Spring Boot设置一个JUnit测试:-

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE,
        classes = {AccountingApplication.class})
@DataMongoTest
public class BaseEmbeddedTest {


    @ClassRule
    public static KafkaEmbedded embeddedKafka = new KafkaEmbedded(1, true);

    @Autowired
    private MongoTemplate mongoTemplate;


    @Test
    public void emptyTest(){

    }

}

src/test/resources/application.yml:-

spring:
  data:
    mongodb:
      port: 0
  kafka:
    bootstrap-servers: ${spring.embedded.kafka.brokers}
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [de.flapdoodle.embed.mongo.config.IMongodConfig]: Factory method 'embeddedMongoConfiguration' threw exception; nested exception is java.net.BindException: Cannot assign requested address: JVM_Bind
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
    ... 140 more
Caused by: java.net.BindException: Cannot assign requested address: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
    at java.net.ServerSocket.bind(ServerSocket.java:375)
    at java.net.ServerSocket.<init>(ServerSocket.java:237)
    at de.flapdoodle.embed.process.runtime.Network.getFreeServerPort(Network.java:80)
    at org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration.embeddedMongoConfiguration(EmbeddedMongoAutoConfiguration.java:147)

版本:-

    dependencyManagementPluginVersion = '1.0.3.RELEASE'
    springBootVersion = '1.5.6.RELEASE'
    springCloudVersion = 'Dalston.SR2'
    projectVersion = '0.0.1-SNAPSHOT'
    javaVersion = 1.8
    kotlinVersion = '1.1.4'

共有1个答案

慕健
2023-03-14

以下注释:@datamongotest导致Spring Boot创建一个嵌入式Mongo实例。异常消息告诉我们,嵌入的Mongo实例无法启动,因为它试图运行的端口上已经有一个进程在运行。

嵌入式Mongo实例由EmbeddedMongoAutoConfiguration配置,Spring Boot应用的策略--端口分配--如下所示:

if configured Mongo port > 0 then 
    use the configured port
else 
    assign a random port
end

因此,我怀疑您的测试上下文为spring.data.mongodb.port配置了一个非零值。我知道您发布了application.yml,这意味着您正确地为spring.data.mongodb.port分配了一个零值,但是如果您在EmbeddedMongoAutoConfiguration构造函数中放置一个断点,并在properties参数中查看,我想您会看到该配置类使用的实际值不是零。如果传递给EmbeddedMongoAutoConfiguration的端口值实际上为零,但仍然得到JVM_Bind错误,那么这意味着这个调用:network.getFreeServerPort(this.getHost())没有返回空闲端口,这似乎不太可能。

为了解决这个问题:只要您用Spring.data.mongodb.port=0配置测试上下文,那么嵌入的Mongo实例将被分配一个随机端口,并且这个随机端口将被Spring上下文的其他方面(例如MongoTemplate)所知道,这些方面需要与Mongo实例对话。

 类似资料:
  • 问题内容: 我想在我的应用程序中使用低端口(Spring Web上的SNMP陷阱接收器+ Tomcat7)。正如我之前在此线程将低端口绑定到Ubuntu Server上的Java程序中所告诉的那样,我收到了错误权限被拒绝。然后,我将tomcat7用户组更改为root。但是之后,我得到了java.net.BindException:无法分配请求的地址错误。对于我尝试的每个端口(低端口或高端口),我总

  • 我想在我的应用程序中使用低端口(SpringwebTomcat7上的SNMP陷阱接收器)。正如我之前在Ubuntu服务器上的这个线程Binding Low Port to Java Program中所说的,我得到了一个错误Permission denied。然后我将tomcat7用户组更改为root。但在那之后,我得到了java.net。BindException:无法分配请求的地址错误。对于我尝

  • 我正在使用 GNetLib 在我的计算机上测试我的服务器。每当我使用我的网络的IP时,它都不会让我绑定。 我的主机是“76 . 5 . 43 . 21”//没有张贴我的实际IP,但你得到了要点。端口是43594,我已经用canyouseeme.org测试了连接,它显示成功。 以下是完整的错误: 问题是我使用家庭网络的IP,还是库限制了我可以使用的IP?

  • 问题内容: 当我尝试设置套接字服务器时,出现错误消息: 整个代码是最简单的: 我100%确定端口已转发,Windows防火墙已关闭。什么都不会阻塞端口9999。还有什么会出错? 问题答案: 正如其他人指出的那样,这很可能与使用port的另一个进程有关。在Windows上,运行以下命令: 并且它应该列出任何阻塞端口的内容。当然,您必须去手动在Task Manager中杀死那些程序。如果仍然无法解决问

  • 我想发送和接收数据报套接字,但遇到了异常。我传递了要通信的服务器的正确IP地址和正确的端口号。 请帮帮我。

  • 问题内容: 我在172.16.1.218上运行以下node.js服务器: 我可以远程登录到它,它会按预期的方式回显。 我有以下运行在172.16.1.224上的node.js服务器: 但是,当我尝试运行它时,出现以下错误: 我已关闭所有防火墙等。对于此错误,我一无所知。希望有人能提供帮助。 提前谢谢了, 问题答案: 开启时,您无法监听,因为那不是您正在监听的计算机的IP。 如果要在该计算机上收听,