gpt4 book ai didi

init.d - 基于 Spring Boot (Tomcat) 的应用程序作为守护进程 - 如何停止?

转载 作者:行者123 更新时间:2023-12-05 01:21:25 26 4
gpt4 key购买 nike

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

为了防止系统重启,我想将一些信息备份到 mysql 数据库中。

在我的网络服务中,我使用 @Scheduled()@PreDestroy 来运行备份。

当我用 ^C 停止服务器时,一切顺利。

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

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

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

最佳答案

如果您包含 spring-boot-starter-actuator,那么它会提供一个用于管理的 REST 端点。提供的端点之一是 /shutdown。通过命中该端点,您将获得所有资源的受控关闭,这确保将调用 @PreDestroy。由于默认启用这可能很危险,因此要使用它,您需要将以下内容添加到您的 application.properties 文件中:

endpoints.shutdown.enabled=true

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

在相关说明中,您可能会找到我对 Spring Boot application as a Service 的回答很有用,我在其中提供了使用它的完整 init.d 脚本的代码。

关于init.d - 基于 Spring Boot (Tomcat) 的应用程序作为守护进程 - 如何停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20033275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com