断电时优雅地关闭应用程序

rya*_*dlf 6 java shutdown

我知道使用UPS防止服务器立即关闭的重要性.如何在Java应用程序中侦听此类事件?

假设我的UPS将在断电时继续满负荷运行5分钟.他们的服务器将继续运行,但我的应用程序将如何知道是时候开始正常关闭事情了?

这个特定的应用程序主要处理客户端到数据库事务.我主要关注的是在服务器在mysql事务中间立即断电的情况下数据损坏.以下几点是处理电力情况的正确方法吗?

  • 电力消失了.UPS电池模式.应用会检测到此
  • 应用程序以某种方式阻止所有传入的请求(任何有关这样做的建议都会有所帮
  • 在几分钟内,所有正在进行的交易都应该完成.
  • 关机申请
  • 如果电池电量耗尽,服务器会停机......等待恢复.

有没有办法在恢复供电时自动重启服务器和应用程序,还是必须手动完成?

gma*_*gma 3

处理 UPS 可能必须在操作系统级别进行处理,并使用 SNMP 或系统脚本等监控工具。

如果您在网上查找,您可能会发现许多脚本在收到来自 UPS 的电源故障事件时执行某些操作。

你必须向你的 JVM PID 发送一个 QUIT 信号(在 Unix/Linux 上),并且在 JVM 端你可以使用方法注册一个关闭钩子Runtime.addShutdownHook

如果使用像 Spring 这样的框架,它肯定已经注册了一些东西,并且会调用 bean 的 destroy 方法(如果配置)。