使用Java关闭Tomcat实例

金特拉维斯

我正在运行一个使用tomcat作为容器的应用程序-在启动时,需要找到并加载几个文件。但是,如果这些文件之一不存在或无法读取,我想记录异常并退出应用程序,这是我目前正在使用System.exit(1)进行的操作……但是,有没有更好的选择?这样的方式?

任何帮助深表感谢!

斯特凡

我不知道这是否适合您的需求,但它确实适用于我的应用程序。如果在您的web.xml中声明了侦听器,则在应用程序启动时调用该侦听器:

<listener>
    <listener-class>your.package.TestServletListener</listener-class>
</listener>

您可以在那里进行测试,如果失败则调用ShutdownThread。它将连接到Tomcats的shutdown端口,并以String的形式发送shutdown命令:

public class TestServletListener implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent arg0) {
    System.out.println("Starting app, running 5 tests ...");

    // do tests ...
    for (int i = 0; i < 5; i++) {
        System.out.println("testing ... " + i);
        waitFor(1000);
    }
    // If a test failed call:
    System.out.println("test failed!");
    new ShutdownTask().start();
}

@Override
public void contextDestroyed(ServletContextEvent arg0) {
    System.out.print("Stopping app, cleaning up (takes 3 sec) ... ");
    waitFor(3000);
    System.out.println("done");
}

private void waitFor(int i) {
    try {
        Thread.sleep(i);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

class ShutdownTask extends Thread {

    @Override
    public void run() {
        try {
            Socket s = new Socket("127.0.0.1", 8015);
            PrintStream os = new PrintStream(s.getOutputStream());
            os.println("shutdown");
            s.close();
            System.out.println("Shutting down server ...");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
}

您需要确保shutdown port和shutdown命令与Tomcats server.xml同步:

...
<Server port="8015" shutdown="shutdown">
...

例如,您可以在web.xml中将它们作为上下文参数传递。像System.exit(...)一样,如果Tomcat与SecurityManager一起运行,这将无法工作(没有进一步的配置)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Java关闭Tomcat实例

来自分类Dev

如何使用nircmd关闭进程的特定实例?

来自分类Dev

使用 Curator 中的 ServiceCache 通知实例关闭

来自分类Dev

Java-在使用者正在等待并且tomcat关闭时停止线程

来自分类Dev

使用CLI / Boto创建Java 7,Tomcat 7 Elastic Beanstalk实例

来自分类Dev

实例正确使用Java

来自分类Dev

任务管理器上未关闭Java实例

来自分类Dev

使用Java关闭websocket连接

来自分类Dev

如何使用VBA在Access中关闭单个表单实例?

来自分类Dev

使用 gcloud cli 增加 windows 实例的关闭时间

来自分类Dev

Tomcat8使用AbstractProtocol.pause随机关闭

来自分类Dev

关闭和多个实例

来自分类Dev

关闭检查的实例

来自分类Dev

OpsWorks实例关闭

来自分类Dev

VMWare Player关闭实例

来自分类Dev

如何使用Java关闭appium中的键盘?

来自分类Dev

实例化和关闭Realm实例

来自分类Dev

实例化和关闭Realm实例

来自分类Dev

关闭函数的先前实例nodejs

来自分类Dev

关闭Shell.Application实例

来自分类Dev

类实例上的PHP关闭

来自分类Dev

如何从NSObject实例关闭窗口

来自分类Dev

仅关闭JFrame的单个实例?

来自分类Dev

VLC虚拟实例不可关闭

来自分类Dev

由于错误强制关闭java.lang.RuntimeException:无法实例化活动ComponentInfo

来自分类Dev

使用Gradle任务创建Java类的实例?

来自分类Dev

如何使用Java反射创建Protobuf实例?

来自分类Dev

如何使用Java制作Blockly块的实例?

来自分类Dev

Java使用注释创建类的实例