java - 运行嵌入式服务器时 OrientDb 端口范围的用途是什么?

标签 java spring spring-data orientdb maven-surefire-plugin

我正在运行嵌入式 OrientDb。我们使用 Spring/Spring Data,并且通过 Maven 的 Surefire 插件运行 JUnit 测试。

嵌入式数据库在每次测试之前启动。如果可能的话,我想以某种方式更改此设置,以便在每个 Maven 模块执行时加载一次。

我有以下内容:

OServerNetworkListenerConfiguration binaryListener = new OServerNetworkListenerConfiguration();
binaryListener.ipAddress = "0.0.0.0";
binaryListener.portRange = "2424-2430";
binaryListener.protocol = "binary";
binaryListener.socket = "default";

显然,由于测试量较大,6 个端口不足,我收到了这个神秘的错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project bar-api: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test failed: The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
[ERROR] Command was /bin/sh -c cd /java/foo/bar/bar-api && /java/jdk1.8.0_65/jre/bin/java -Xmx1024m -Xms512m -jar /java/foo/bar/bar-api/target/surefire/surefirebooter3262843936755308263.jar /java/foo/bar/bar-api/target/surefire/surefire2085279380429297504tmp /java/foo/bar/bar-api/target/surefire/surefire_53552629494142788284tmp

我的代码中没有 System.exit(),但 Maven Surefire 插件退出了构建。

我的问题是:为什么需要这么多端口?就不能用一个吗?我在这里错过了什么以及如何解决它? (暂时,我只是增加了端口数量,作为临时解决方法,但我真的很想更好地理解这个问题并正确解决它)。

最佳答案

当服务器实例启动时,它会尝试将监听器绑定(bind)到该范围内第一个未使用的端口。因此,您不能对两个不同的服务器实例使用相同的端口。

关于java - 运行嵌入式服务器时 OrientDb 端口范围的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40243541/

相关文章:

java - Mono<Mono<Object>> 如何订阅

java - 使用java通过UDP发送/接收不同的对象

spring - LocalDateTime 未转换为 String 而是转换为 Json 对象

spring - 如何从 REST spring 应用程序的 SqlExceptionHelper 获取有关错误的信息

java - Spring Data JPA CDI 集成因 Wildfly Swarm 而失败

java - 如何使用 hibernate 映射插入当前时间戳?

java - gridbaglayout 将组件定位到中心

spring - 如何在 Spring Cloud AWS SQS 中以编程方式设置消息处理程序?

xml - 在Spring XML Config文件中从其他子项目加载sql脚本

java - 仅使用 xml 和 java 类动态填充下拉列表