【问题标题】:How can I detect when my standalone Java application was shut down?如何检测我的独立 Java 应用程序何时关闭?
【发布时间】:2015-09-19 03:25:32
【问题描述】:

我有一个独立的 Java 应用程序,它充当连接到 ActiveMQ 队列的消费者。在我的应用程序的main() 方法中,我创建了一个消费者实例作为线程并启动它。

看到我为此使用 JMS,我想向我的应用程序添加一个关闭挂钩,以便当我的应用程序停止工作(终止或终止)时,我的应用程序将运行一些方法,其中我的所有资源都将被关闭.

我已经尝试过Runtime.addShutdownHook(),但每当我关闭我的应用程序时似乎都没有调用它。

我希望它的行为就像调用了 ServletContextListener 的 contextDestroyed() 方法一样。

【问题讨论】:

  • 您究竟是如何关闭应用程序的?没有办法添加一个保证在每个关闭方法中运行的钩子;操作系统可以简单地终止应用程序的进程,而不允许任何代码运行。
  • 好吧,现在因为我只是在开发,我使用 Eclipse 来运行和终止我的应用程序。一旦我最终将它打包到 JAR 中,我很可能会使用 linux shell 运行它并使用 Ctrl+C 终止它。
  • Runtime.addShutdownHook() 将仅在正常关机的情况下被调用,即当您执行 CTRL+C 或 Kill 时,但如果您执行硬关机,即在 Kill -9 的情况下,不会调用此 shutdownHook。

标签: java multithreading jms


【解决方案1】:

Runtime.addShutdownHook() 是要使用的正确 API,但不幸的是 Eclipse 中的“停止”按钮会终止进程,而不允许任何挂钩运行。请参阅Shutdown hook doesn't work in Eclipse 了解更多信息。

【讨论】:

  • 那么你的意思是,如果我将我的应用程序打包为一个 just 并独立于任何 IDE 运行它,那么钩子会起作用吗?
猜你喜欢
  • 2019-03-27
  • 1970-01-01
  • 2011-10-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多