捕获 Wildfly 关闭钩子

Capture Wildfly shutdown hook

在独立的 java 应用程序中,很容易知道您的应用程序何时关闭

public class ShutDownHook 
{ 
  public static void main(String[] args) 
  { 

    Runtime.getRuntime().addShutdownHook(new Thread() 
    { 
      public void run() 
      { 
        System.out.println("Shutdown Hook is running !"); 
      } 
    }); 
    System.out.println("Application Terminating ..."); 
  } 
}

在 Wildfly 应用程序服务器中捕获此事件的选项是什么?

一种可能是使用 ServletContextListener。这是 Web 应用程序中的一个 class,用于侦听 Web 应用程序 的启动 (contextInitialized) 和关闭 (contextDestroyed) 事件 。您的代码类似于:

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class MyServletContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("Application Terminating ..."); 
    }
}

这不是您想要的 100%,因为如果安装它的 webapp 未部署,例如,Wildfly 仍然 运行ning 但您的 webapp 不是。但是,如果您的环境只有一个 webapp,或者如果您可以将此代码放入必须 运行ning 的 webapp 中,那么这将正常工作。请注意,这是标准的 JEE 代码,因此您可以 运行 在任何支持 servlet 的容器中使用它。