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

基于Spring Boot(Tomcat)的应用程序作为后台进程-如何停止?

澹台臻
2023-03-14

我编写了一个使用嵌入式tomcat作为容器的Spring Boot webservice。

如果系统重新启动,我想备份一些信息到一个mysql数据库。

在我的webservice中,我使用@schedule()@predestroy来运行备份。

当我用^C停止服务器时,这就很好了。

但当我使用sysV skript(/etc/init.d)和kill命令终止进程时--即使守护进程依赖于mysql,mysql服务器也会在备份完成之前关闭(导致我的日志中出现SQL异常)。

原因当然是,kill只是发送一个停止进程的信号。

我如何(从我的sysv skript)同步停止运行的spring boot tomcat服务器?

共有1个答案

祖波光
2023-03-14

如果您包含了Spring-Boot-Starter-Acture,那么这就为管理提供了一个RESTendpoint。提供的一个endpoint是/shutdown。通过访问该endpoint,您将获得所有资源的受控关闭,这确保@predestroy将被调用。由于在默认情况下启用这可能是危险的,因此要使用它,您需要将以下内容添加到您的application.properties文件中:

endpoints.shutdown.enabled=true

当然,一旦您公开了该endpoint,您就需要确保应用了少量的安全措施来防止任何人关闭您的服务器

与此相关的一点是,您可能会发现我对Spring Boot application as a Service的回答很有用,在这里我提供了完整的init.d脚本的代码,它利用了这一点。

 类似资料:
  • 问题内容: 我对Tomcat不太熟悉,在我看来,它基本上是抽象为cgi服务器,可以在两次调用之间保存JVM -尽管我知道它可以做得多。 我正在寻找一种在Tomcat服务器启动时启动 后台 线程的方法,该方法会定期更新服务器上下文(在我的特殊情况下,这是一个侦听其他服务的心跳并更新可用性信息的线程,但是可以想象得到有多种用途)。 有标准的方法吗?上下文的启动和更新/查询? 指向相关文档和/或代码示例

  • 完成干净的构建后,我将war文件复制到Tomcat的文件夹中。但是部署会发生两次,并且在上下文已经存在的情况下以异常结束。我错过了什么? 非常感谢您的帮助。

  • 问题内容: 我有一个媒体播放器服务,可在整个应用程序的后台播放音乐,例如: 问题在于,当用户更改应用程序或进入手机主屏幕(应用程序在后台运行)时,音乐仍在播放。 我试图停止它和方法,但是当我更改活动时这会停止音乐,这是我不希望的(我希望音乐在用户浏览活动时继续播放)。 更新资料 我尝试了广播: 我加了 在音乐服务的onCreate和接收事件的方法中: 在应用程序类中,我这样做: 但是音乐不会恢复

  • 问题内容: 我目前正在为运行ubuntu的vms开发一个简单的部署脚本。所有这些机器都应该运行以jar形式提供的Java应用程序。 这是安装Java,将jar从本地计算机复制到远程计算机然后启动应用程序的脚本的相关部分: 通过java_installation.sh脚本的安装成功,scp命令也是如此。尝试通过ssh执行java_start_jar.sh中的命令时,会发生问题。java_start_

  • 如果我正在开发一个相当简单的基于Spring Boot控制台的应用程序,那么我不确定主执行代码的位置。我应该将其放置在public static void main(String[]args)方法中,还是让主应用程序类实现CommandLineRunner接口并将代码放置在run(String…args)方法中? 我将使用一个示例作为上下文。假设我有以下[基本]应用程序(编码为接口,Spring样