如何修复 springboot 错误 Failed to retrieve RMIServer stub: javax.naming.CommunicationException error during JRMP connection establishment
How to fix springboot error Failed to retrieve RMIServer stub: javax.naming.CommunicationException error during JRMP connection establishment
我在 springboot
maven
项目和 docker
中的 cassandra
有问题。
我想执行 mvn verify
并在 pre-integration-test
中启动 cassandra docker 和 api 服务器,执行测试然后在 post-integration-test
中停止服务器但我面临错误Could not contact Spring Boot application: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment;
我已经创建了 github
存储库,因此您可以轻松重现错误。
重现步骤:
git clone https://github.com/gandra/docker-cassandra-with-initial-seed.git
cd docker-cassandra-with-initial-seed
mvn verify
这将产生如下错误:
[INFO]
[INFO] --- spring-boot-maven-plugin:2.2.2.RELEASE:start (api-server-start) @ docker-cassandra-with-initial-seed ---
[INFO] Attaching agents: []
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.501 s
[INFO] Finished at: 2021-01-21T18:39:05+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.2.2.RELEASE:start (api-server-start) on project docker-cassandra-with-initial-seed: Could not contact Spring Boot application: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
[ERROR] java.io.EOFException]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
知道如何修复。
p.s。
我正在研究 mac,此解决方案也适用于 mac 和 linux。
代码 https://github.com/gandra/docker-cassandra-with-initial-seed 已修复,现在可以使用。
基本上改变了两件事:
- 已从 docker-cassandra.sh.
中删除端口映射 9001
- 在
docker-cassandra.sh
的 cassandra_start 函数中添加了 sleep 20
秒,以便为 cassandra 提供正确启动的时间。不好,但至少可以工作。
现在以下代码应该可以与成功执行的 1 个集成测试一起使用:
git clone https://github.com/gandra/docker-cassandra-with-initial-seed.git
cd docker-cassandra-with-initial-seed
mvn verify
如果您使用的是 Windows,则 2020 年解决了一个问题,该问题很难找到(here Github 上的完整主题,如果您想阅读全文)。
回顾一下,解决方案是修复 jmxPort
。例如:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jmxPort>9011</jmxPort>
</configuration>
[...]
这里的问题是他试图使用一个已经被使用的端口。
我在 spring 启动时遇到了类似的问题(而不是 cassandra)。
我认为解决这个问题的两种方法:
第一种方式:
- 找到正在使用该端口的程序(在我的例子中是端口 9001 上的“Intel(R) 图形命令中心”)。 (您可以在命令提示符下使用 netstat /a /b)或使用 tcpview(外部免费程序)
- 禁用程序
- 利润
第二种方式
在 spring-boot-maven-plugin 的 pom 中配置 jmx 端口
(来自sixro的回答)
但是,我不喜欢这种方式,因为你基本上强迫项目中的其他人使用你的解决方法,而问题出在你的机器上。
我在 springboot
maven
项目和 docker
中的 cassandra
有问题。
我想执行 mvn verify
并在 pre-integration-test
中启动 cassandra docker 和 api 服务器,执行测试然后在 post-integration-test
中停止服务器但我面临错误Could not contact Spring Boot application: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment;
我已经创建了 github
存储库,因此您可以轻松重现错误。
重现步骤:
git clone https://github.com/gandra/docker-cassandra-with-initial-seed.git
cd docker-cassandra-with-initial-seed
mvn verify
这将产生如下错误:
[INFO]
[INFO] --- spring-boot-maven-plugin:2.2.2.RELEASE:start (api-server-start) @ docker-cassandra-with-initial-seed ---
[INFO] Attaching agents: []
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.501 s
[INFO] Finished at: 2021-01-21T18:39:05+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.2.2.RELEASE:start (api-server-start) on project docker-cassandra-with-initial-seed: Could not contact Spring Boot application: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
[ERROR] java.io.EOFException]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
知道如何修复。
p.s。 我正在研究 mac,此解决方案也适用于 mac 和 linux。
代码 https://github.com/gandra/docker-cassandra-with-initial-seed 已修复,现在可以使用。
基本上改变了两件事:
- 已从 docker-cassandra.sh. 中删除端口映射 9001
- 在
docker-cassandra.sh
的 cassandra_start 函数中添加了sleep 20
秒,以便为 cassandra 提供正确启动的时间。不好,但至少可以工作。
现在以下代码应该可以与成功执行的 1 个集成测试一起使用:
git clone https://github.com/gandra/docker-cassandra-with-initial-seed.git
cd docker-cassandra-with-initial-seed
mvn verify
如果您使用的是 Windows,则 2020 年解决了一个问题,该问题很难找到(here Github 上的完整主题,如果您想阅读全文)。
回顾一下,解决方案是修复 jmxPort
。例如:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jmxPort>9011</jmxPort>
</configuration>
[...]
这里的问题是他试图使用一个已经被使用的端口。 我在 spring 启动时遇到了类似的问题(而不是 cassandra)。
我认为解决这个问题的两种方法:
第一种方式:
- 找到正在使用该端口的程序(在我的例子中是端口 9001 上的“Intel(R) 图形命令中心”)。 (您可以在命令提示符下使用 netstat /a /b)或使用 tcpview(外部免费程序)
- 禁用程序
- 利润
第二种方式
在 spring-boot-maven-plugin 的 pom 中配置 jmx 端口 (来自sixro的回答) 但是,我不喜欢这种方式,因为你基本上强迫项目中的其他人使用你的解决方法,而问题出在你的机器上。