当前位置: 首页 > 知识库问答 >
问题:

Spring Boot 2.2.0进程在调试模式下启动时无法终止

潘衡
2023-03-14

当在Eclipse 2019-06和IntelliJ 2019.2的调试模式下运行sping-boot2.2.0时,试图通过IDE终止进程看起来像是杀死了进程(根据IDE),但是,java进程仍在运行(由ps-ef|grep java验证)。

在Eclipse中运行非调试模式时,进程可以终止,但Eclipse会显示一条消息,说明“terminate failed”。

我尝试过各种旧的post选项,包括:-Dspring boot:run。fork=false-Dfork=false

运行Spring在cmd线使用mvnSpring引导:运行正常终止与ctrl-c。

我没有在Eclipse中使用任何spring插件。我使用的是开放jdk 11.0.37。

在spring boot 2.1.7、2.1.8和2.1.9中,一切正常

这可能是spring boot 2.2.0中的错误吗?

共有2个答案

司寇旺
2023-03-14

当我转到2.2.0(JDK 11)时,我也遇到了同样的问题。

正如@Guide adic所说:自2.2.0以来,JVM默认是分叉的。

对我来说不幸的是,如果我禁用分叉,我会失去一些功能,比如控制台中的颜色,这在以前没有分叉的情况下是有效的。此外,分叉允许使用开发工具,带有实时重载,这很有趣。

在互联网上进行了漫长而危险的搜索后,我在某个地方找到了一个无关答案的解决方案(我丢失了链接)。

在main方法中,从run方法获取应用程序上下文,然后打开控制台扫描程序
当你在Eclipse中按下红方块以关闭应用程序时,扫描器会抛出一个异常:Eclipse管理的(可见)线程是链接到控制台的线程,因此扫描器不喜欢你敢停止它
您只需捕获它即可退出应用程序:

log.info("Press 'Enter' to terminate");
try (Scanner scanner = new Scanner(System.in)) {
    scanner.nextLine();
}
finally {
    log.info("Exiting");
    System.exit(SpringApplication.exit(context));
}

此外,如果在Eclipse控制台中按“enter”,它将退出应用程序并终止所有应用程序JVM。

牧甫
2023-03-14

使用Spring Boot v2.2.0. RELEASE,从maven插件启动时,JVM进程分叉默认启用:

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes#fork-enabled-by-default-in-maven-plugin

此时,Intellij在2019.2和更早版本中的maven插件似乎没有将子进程关联到调试会话,IDE甚至无法在进程启动后关闭该进程。

以下参考资料中的任何解决方案都不适合我。我发现禁用分叉的唯一方法是直接在pom中的spring boot maven插件中设置标志。像这样的xml:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <!-- disable process forking that is enabled by default in spring-boot 2.2.0.RELEASE and higher -->
        <fork>false</fork>
    </configuration>
</plugin>

之后,我现在可以右键单击spring boot:run,选择debug,调试器将连接到正确的子进程。

其他参考:

https://github.com/spring-projects/spring-boot/issues/18638

https://github.com/spring-projects/spring-boot/issues/18706

 类似资料:
  • 我试图通过取消standalone.conf文件中JAVA_OPTS行的注释,在调试模式下启动JBoss 7.x。我看到一个非常奇怪的行为,JBoss不启动,它退出了错误“JDWP传输dt_socket初始化失败,TRANSPORT_INIT(510)”绑定问题。有人看过这个问题吗?端口号是8787,当我使用netstat时,我看不到8787上有任何东西在运行。 有什么想法吗?

  • 我正尝试使用hybrisserver.bat调试从控制台启动hybris服务器,但失败 C:\work\trail\hybris\bin\platform>hybrisserver.bat调试'findstr'不能识别为内部或外部命令、可操作程序或批处理文件。用法:“C:\work\trail\hybris\bin\platform\tomcat\bin\wrapper.bat”{console:

  • 我试图在调试模式下启动我的android应用程序,但每次我检查它说这是错误的。更进一步,在buildtypes中定义的buildconfigField甚至不会显示在BuildConfig中。 这是我的gradle文件: 因此,在Android Studio中,我为我的应用程序选择了build Variant“debug”,但当我在应用程序中点击一个断点并检查的值时,无法解析字段,并且无法解析

  • 问题内容: 我正在使用Selenium Webdriver,Ruby 32位1.9.3,Chromedriver v2.9.248315,Chrome 38.0.2125.111 m和Jenkins 1.588的本地实例 Gems: cucumber (1.3.17),selenium-webdriver (2.43.0), watir-webdriver (0.6.11)(如果您认为有必要,可以

  • 最近我从旧的蝗虫版本(0.14.2)切换到1.3.1。以前,我可以使用命令WebsiteUser().run()在调试模式下运行,它会在所有断点上停止。 当我尝试使用相同的命令运行新版本时,会出现下一个错误: 文件“/home/user/PycharmProjects/my_test/venv/lib/python3.7/site packages/hocust/user/users.py”,第2

  • 我正在使用2.2.3 我使用创建了一个非常简单的项目。 当我运行项目时,在选项卡中出现以下错误: 那么该怎么做才能防止这种过程杀熟呢?