当在Eclipse2019-06和IntelliJ 2019.2中以调试模式运行spring-boot 2.2.0时,试图通过集成开发环境终止进程看起来像是杀死了进程(根据集成开发环境),但是,java进程仍在运行(由ps -ef | grep java验证)。
当在Eclipse中运行非调试模式时,可以终止进程,但是Eclipse会显示一条消息,声明"terminate failed“。
我尝试过所有旧的post选项,包括:-Dspring-boot:run.fork=false -Dfork=false
使用mvn spring -boot在cmd线上运行spring:run使用ctrl-c正常终止。
我没有在Eclipse中使用任何spring插件。我使用的是open jdk 11.0.3+7。
spring-boot 2.1.7、2.1.8和2.1.9一切正常
这可能是spring-boot 2.2.0中的一个bug吗?
发布于 2019-11-05 05:24:26
在Spring Boot v2.2.0.RELEASE中,从maven插件启动时,默认情况下会启用JVM进程派生:
此时,Intellij的maven插件在2019.2和更早的版本中似乎没有将子进程与调试会话相关联,IDE甚至无法在启动后关闭进程。
下面的参考资料中的解决方案对我都不起作用。我发现禁用forking的唯一方法是直接在pom.xml中的spring-boot-maven-plugin中设置标志,如下所示:
<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,调试器就会连接到正确的子进程。
其他参考资料:
发布于 2019-12-04 23:58:11
当我迁移到2.2.0 (+ JDK 11)时也遇到了同样的问题。
正如@ since所说:从2.2.0开始,默认情况下会派生JVM。
不幸的是,如果我禁用了forking,我就会失去一些功能,比如控制台中的颜色,这在以前没有fork的情况下是有效的。此外,forking允许使用DevTools,并进行实时重新加载,这非常有趣。
在互联网上进行了长时间的危险搜索后,我在某个地方找到了一个不相关的Stackoverflow答案的解决方案(我丢失了链接)。
在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。
https://stackoverflow.com/questions/58509682
复制相似问题