Spring 使用 Elasticsearch 嵌入式启动在端口 54022 上发生冲突

Spring Boot with Elasticsearch embedded conflicting on port 54022

我正在尝试在我的开发机器上启动两个 spring-boot (1.3.2.RELEASE) 应用程序实例。该应用程序通过 spring 数据 elasticsearch (1.3.2.RELEASE) 使用嵌入的 elasticsearch (1.5.2)。

我将实例配置为使用不同的端口 (-Dserver.port=8081),这适用于我没有使用 elasticsearch 的其他应用程序。

所以,我的第一个实例正常启动,第二个实例启动我得到

Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 54022; nested exception is: 
java.net.BindException: Address already in use

我试图从日志中获取更多信息,但没有帮助。

logging.level.org.elasticsearch=TRACE

我什至试过了

logging.level.root=TRACE

没有提到端口 54022。Google 也没有多大帮助。

更新: 我在 STS 中启动我的实例。关闭实例时(控制台视图中的红色方形按钮),我看到 STS 连接到 54022 端口。也许是某种关闭端口?

andrey:~$ lsof -i tcp:54022 STS 447 andrey 36u IPv6 0xf4ba94cfea1e25e5 0t0 TCP localhost:49424->localhost:54022 (CLOSE_WAIT)

此问题特定于 STS IDE(Spring 工具套件)。如果您 运行 来自控制台的应用程序,这将无法重现。

54022 是 JMX Port 的 STS。

要解决此问题,请转到 Run > Run Configurations... > Spring Boot App > <your_run_config> > Spring Boot (Tab)

切换Enable Live Bean支持或更改JMX Port