有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Web服务器关闭时调用contextDestroyed方法

我创建了一个只有一个servletContext列表器的webapp

代码如下: 我试过用Runtime.getRuntime(),但没用。所以,虽然谷歌搜索遇到了ProcessBuilder,但它也不起作用

我可以通过在UNix box上从控制台运行来执行脚本

下面代码的目的是在服务器停机时执行sh脚本,比如捕获echo Hello > test.txt。但当服务器关闭时,该脚本不会执行。不确定为什么conextDestroyed没有被调用,或者如果conextDestroyed被调用为什么脚本没有被执行

public class MyTestContextListener implements ServletContextListener{

@Override
public void contextDestroyed(ServletContextEvent arg0) {
    // TODO Auto-generated method stub
    ProcessBuilder pb = new ProcessBuilder("/bin/bash","/local/test/tomcatContextTest/tomcatContextListener.sh");
    try {
        pb.start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



}

@Override
public void contextInitialized(ServletContextEvent arg0) {
    // TODO Auto-generated method stub

    ProcessBuilder pb = new ProcessBuilder("/bin/bash","/local/test/tomcatContextTest/tomcatStartContextListener.sh");
    try {
        pb.start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
}

共 (1) 个答案

  1. # 1 楼答案

    服务器可能会停机的原因有很多:

    • 内部错误(如OutOfMemory)——在这种情况下,不会调用ServletContextListener
    • 有人杀死了应用服务器——永远不会调用ServletContextListener
    • 显式停止上下文(例如在管理器中)——ServletContextListener被调用
    • 您可以显式停止整个应用程序服务器——ServletContextListener被调用