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

时间:2013-05-16 15:37:42

标签: java shutdown

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

当电源停止时,我的UPS将在满负荷下继续运行5分钟。他们的服务器将继续运行,但我的应用程序将如何知道是时候开始正常关闭服务了?

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

  • 电源熄灭。 UPS电池模式。应用会检测到这一点。
  • 应用程序会以某种方式阻止所有传入的请求(任何有关此操作的建议都会有所帮助)
  • 在几分钟内,所有正在处理的交易都应该完成。
  • 关闭申请
  • 如果电池电量耗尽,服务器会停机......等待恢复。

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

2 个答案:

答案 0 :(得分:3)

处理UPS可能需要在操作系统级别使用SNMP或系统脚本等监督工具进行处理。

我在线查看,您可能会发现许多脚本在从UPS接收电源故障事件时执行某些操作。

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

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

答案 1 :(得分:1)

在Java应用程序中创建java套接字以侦听来自localhost的已定义端口,并配置UPS软件以在断电时将事件发送到此端口。