我是java spring-boot的初学者。
当我启动java服务器时
nohup java -jar demo-0.0.1-SNAPSHOT.jar
命令我的线程启动它们的操作
有时当我停止我的服务器时
kill -9 processid
所以我正在运行的线程数据丢失了。
每当服务器停止时,我想在数据库中维护一个线程标志。
在遵循本教程弹簧启动停机时,我尝试实现上述场景。它正常工作,但它破坏了我的安全性,因为任何人都可以使用这个API来停止我的服务器。
我需要一种方法来优雅地终止我的服务器并调用ContextClosedEvent类。
发布于 2022-05-04 20:54:06
如果您使用kill -9,那么Spring提供的任何优雅的关闭支持都不会起作用。这就是SIGKILL,它不能被捕获、阻塞或忽略,所以您的应用程序当然不能做任何响应它的事情。
使用kill -SIGTERM允许在您的Java运行时中执行关机挂钩。
避免像15和9这样的神奇数字;使用有意义的符号(如SIGTERM )。
发布于 2022-05-04 17:02:45
如果您使用的是2.3及更高版本的Spring版本,则应该将优美停工的特殊配置添加到application.yml中
server:
shutdown: graceful来自java文档:
WebServer应该支持优雅的关闭,允许活动请求有时间完成。
另一个选择是immediate
WebServer应立即关闭
附加资源关闭Spring应用程序
https://stackoverflow.com/questions/72099871
复制相似问题