应用程序停止后,带有debug args的Spring Boot不会关闭调试端口

时间:2018-01-04 14:00:28

标签: java spring maven debugging port

我在启用调试模式的情况下运行Spring Boot应用程序。像:

mvn -P dev spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"

我可以在没有任何问题的情况下调试应用程序。但是,在停止(ctrl + c)并尝试再次启动后,我收到此错误:

[INFO] Attaching agents: []
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]

因此,每次我需要在调试模式下启动应用程序之后,我需要使用端口5005终止进程。

我想知道为什么在停止申请后仍然打开端口5005。

我在Windows 10,Maven 3.5.2,Java 8和Spring Boot 1.5.9.RELEASE上使用Cygwin64。

谢谢!

1 个答案:

答案 0 :(得分:1)

这不是Spring Boot的问题,而是在cygwin中运行的非cygwin应用程序的问题。并且你的应用程序不仅让端口5005保持打开状态,它只是在后台运行,端口8080也打开了,但是在重启时首先打开调试端口,这就是你在错误信息中看到的。

2014年的SpringBoot问题https://github.com/spring-projects/spring-boot/issues/773对此进行了讨论。我引用了这个问题(引文中的链接日期是2006年):

  

任何人仍然关注此错误,这根本不是Spring Boot错误。这是在基于pty的终端上运行的非Cygwin程序(在本例中为Java)的已知问题。

     

请参阅此链接以获取完整说明无法解决的原因:http://cygwin.com/ml/cygwin/2006-12/msg00151.html

所以你基本上可以使用以下方法之一:

  1. 使用本机Windows终端并为此设置您的java和maven环境
  2. 从可以处理此问题的IDE中运行您的maven命令 - 您也可以使用它来进行调试
  3. 将Spring Actuator添加到您的应用程序并使用 / shutdown 端点停止您的应用程序