Java IntelliJ不会终止使用gradle构建的Spring引导应用程序

Java IntelliJ不会终止使用gradle构建的Spring引导应用程序,java,spring,intellij-idea,gradle,spring-boot,Java,Spring,Intellij Idea,Gradle,Spring Boot,我正在Linux上使用Intellij13.1,并尝试按照下面的示例构建一个基本的REST应用程序 当我从IntelliJ中执行目标引导运行时,集成的tomcat服务器启动,一切正常 10:09:35: Executing external task 'bootRun'... :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :findMainClass :bootRun 但停止执行不会影响grad

我正在Linux上使用Intellij13.1,并尝试按照下面的示例构建一个基本的REST应用程序

当我从IntelliJ中执行目标引导运行时,集成的tomcat服务器启动,一切正常

10:09:35: Executing external task 'bootRun'...
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:findMainClass
:bootRun
但停止执行不会影响gradle任务:

10:11:40: External task execution finished 'bootRun'.
我仍然可以在配置的端口上访问tomcat实例。只有关闭IntelliJ才会破坏进程

我搜索了这个话题,但找不到任何合理的答案。我想知道这是不是一个

  • gradle问题(使用gradle包装器版本1.11)
  • Linux问题(Ubuntu 12.04)
  • 智能问题(想法13.1.2)
  • 弹簧启动问题(尝试了从1.0.0.RELEASE到1.1.0.M2的不同版本)

我很确定这是一个IntelliJ问题,因为:

当您从IntelliJ的Gradle integration运行
bootRun
,然后按stop键时,应用程序将继续运行,如您所述

但是,如果使用命令行并运行
gradle bootRun
,然后使用Cntrl+C,则应用程序会正常停止

请注意,我的设置是Windows 7、IntelliJ 13.1.3、Gradle 1.12和Spring Boot 1.1.0.M2

如果您需要能够轻松地调试应用程序,那么您所需要做的就是运行具有
main
方法的Java(或Groovy)类,因为这是运行Spring Boot应用程序的最简单方法!为这一点向Spring Boot致敬


当然,您可以继续使用Gradle来执行诸如运行所有测试或创建打包应用程序之类的任务。

我知道这个答案已经得到了回答,但由于这是在Google中搜索时的第一个主题,我想在分享一个我曾经使用过的替代方法时,我在阅读的其他主题中没有找到

这个
terminate
的主要问题是,我总是在我的类中更改某些内容,我需要重新启动服务器,但它会失败,所以有时我需要
停止/启动服务器

为了避免这种情况,我使用。基本上:

每当类路径上的文件发生更改时,使用spring boot devtools的应用程序将自动重新启动

唯一的问题是,在Intellij上,如果单击
Build>Make project
,它只会
生成项目,因此请将其设置为自动生成,或者记住单击
Make

要使用,只需将依赖项添加到
build.gradle/pom.xml
compile('org.springframework.boot:springbootdevtools')


我发现这在开发中非常有用。

我在Mac中使用IntelliJ,运行Spring boot应用程序也会遇到同样的问题。每当我在终端中运行应用程序并使用CTRL+Z时,终端都会快速运行应用程序。但是当我在同一个终端上再次运行应用程序时,会出现错误,表明端口8080正在使用。
我刚刚尝试了关闭终端会话的选项(右键单击->选择->关闭会话)。这将关闭终端,当我再次单击终端选项并运行应用程序时,应用程序运行平稳。

如果使用“gradle run”会发生什么情况?@DaveSyer run也存在同样的问题。停止执行的唯一方法是终止进程。看起来这是Gradle工具的一个限制-它不允许通过工具api终止长时间运行的任务。有一个变通方法:那么您不使用gradle集成?但是你如何调试你的应用程序呢?@ChristianMetzler我确实使用Gradle集成,但是我将它限制为运行项目测试和运行创建JAR或WAR的构建过程。我只需运行包含
main
方法的Spring引导类即可调试应用程序!谢谢,如果你写下来作为回答,我会接受的。它工作得很好。您应该提到将其配置为web应用程序的单个实例。我相信这与
spring boot:run
forks这一事实有关,它响应Ctrl+C的原因是它手动处理
SIGINT
并结束子进程。有人知道在Intellij中是否会解决此问题吗?Ctrl+Z不是Ctrl+C。使用CTRL+C将SIGINT发送到进程。除非您想将进程发送到后台。后台进程处于休眠状态,但仍保留其所有资源。