我正在运行嵌入式 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/