春季启动Tomcat终止

Posted

技术标签:

【中文标题】春季启动Tomcat终止【英文标题】:spring boot tomcat termination 【发布时间】:2014-06-26 12:13:20 【问题描述】:

我也有同样的问题:Terminating mvn spring-boot:run doesn't stop tomcat

那里的答案说它只发生在 Windows 上,但实际上并非如此。我正在使用 Intellij 在 OSX 上运行 spring boot,当我停止 spring boot 应用程序时,嵌入式 tomcat 仍在运行。这是 Spring Boot 教程中的简单示例应用程序。有什么解决办法吗?

【问题讨论】:

Terminating mvn spring-boot:run doesn't stop tomcat的可能重复 对副本的回答还说这是一个已知问题,已在 1.1.0 快照中修复。你试过了吗? 我在 1.1.4.BUILD-SNAPSHOT,但它仍然会发生。 【参考方案1】:

我在 MAC 上的 intellij 中遇到了完全相同的问题(spring boot 1.1.6.RELEASE)。

我使用 spring boot actuator 解决了这个问题,它提供了一个休息端点(Post)来关闭应用程序:

localhost:port/shutdown

这可以通过命令行调用:例如curl -X POST localhost:port/shutdown

要启用 spring boot 执行器,请添加以下编译 dep:

org.springframework.boot:spring-boot-starter-actuator

我创建了一个 gradle 任务 bootStop,它确实为我运行了这个 cmd。 你可以在 Maven 或 您可以从 cmd 行调用它(也可以通过 intellij 终端)

特别是如果你想使用调试,你应该将上面给出的 curl cmd 包装在一个 gradle/maven 任务中。

查看工作示例(gradle)here

【讨论】:

我只是从命令行而不是 IDE 使用 bootRun 任务。所以就我而言,我只是运行:./gradlew bootRun。当我想停止服务器时,我只需按 ctrl+C 即可停止构建脚本 如果您不想要 ide 的任何调试功能,这可能没问题。如果你想使用它们,你必须通过 ide 调用任务,所以我认为我的方法更好。 如果我想调试,我只需从 IDE 将项目作为纯 java 应用程序运行 您还可以通过使用 Maven Boot 插件在调试模式下轻松运行来“远程”附加调试器(此处的一般说明:javarevisited.blogspot.com/2011/02/…),如下所述:docs.spring.io/autorepo/docs/spring-boot/1.2.1.RELEASE/…【参考方案2】:

这是一个用于配置 HTTP 端点以关闭 Spring Boot Web 应用程序的 Spring Boot 执行器的 Maven 示例:

1.Maven Pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.application.properties:

#No auth  protected 
endpoints.shutdown.sensitive=false

#Enable shutdown endpoint
endpoints.shutdown.enabled=true

列出所有端点here:

3.发送关闭应用的post方法:

curl -X POST localhost:port/shutdown

【讨论】:

【参考方案3】:

我遇到了同样的问题,因此我不得不查看此页面上的所有解决方案以及相关的解决方案。没有人适合我。这就是为什么我做了一些小的研究,似乎捕获的 TCP 端口出现问题只是因为 Gradle 和 mvn 都不知道对 TCP 端口的子操作一无所知。

所以不要杀死进程,只需使用命令:

$ gradlew –stop 

(我希望 mvn 也一样)

此命令优雅地关闭由 Gradle 启动的守护程序并释放由 Tomcat 端口捕获的守护程序。

【讨论】:

【参考方案4】:

按照previous 的回答,此属性现在已弃用,因此将其替换为:

management.endpoint.shutdown.enabled=true

【讨论】:

【参考方案5】:

一个更简单的解决方案是创建一个“Spring Boot”配置并使用它来启动您的应用程序,而不是“Gradle”配置。 “Spring Boot”配置没有遇到这个问题。

【讨论】:

以上是关于春季启动Tomcat终止的主要内容,如果未能解决你的问题,请参考以下文章

春季启动jsp:java.lang.NoClassDefFoundError:org/apache/tomcat/util/security/Escape

春季启动时出现Cors错误,将其与反应连接并尝试在tomcat或jboss服务器上部署?

春季启动战争log4j2

春季启动 jdbc 连接

春季启动部署

启动tomcat时,经常遇到的问题 8080 端口被占用