如何在Tomcat中关闭单个应用程序?

j2cgzkjk  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(74)

我想在我的web应用程序中运行一些代码,以使应用程序停止。例如,如果数据库服务器不可用。我想实现类似于System.exit()App.exit()

仅供参考

Shutdown tomcat using web application deployed in it“中的答案是关于关闭整个容器。这里的问题是关于关闭(或暂时禁用)单个Web应用程序。

mgdq6dx1

mgdq6dx11#

您可以使用MBeans/JMX在Tomcat中关闭单个应用程序:

public void shutdownApp() {
    try {
        String serviceName = "Catalina"; // @see server.xml
        String hostName = "localhost"; // @see server.xml
        String contextName = "MyApplicationName"; // the name of your application in the URL

        Hashtable<String, String> keys = new Hashtable<>();
        keys.put("j2eeType", "WebModule");
        keys.put("name", "//" + hostName + "/" + contextName);
        keys.put("J2EEApplication", "none");
        keys.put("J2EEServer", "none");

        MBeanServerConnection mbeanServer = ManagementFactory.getPlatformMBeanServer();
        ObjectName appObject = ObjectName.getInstance(serviceName, keys);
        System.out.println("Found objectName: " + appObject);
        mbeanServer.invoke(appObject, "stop", null, null);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

字符串
serviceName、hostName和contextName变量需要根据您的配置进行更改。此示例将关闭这样部署的应用程序:

hxxp://localhost:8080/MyApplicationName


除了“停止”,你也可以叫:“开始”或“重新加载”。

dy1byipe

dy1byipe2#

通常我们不会在web应用程序中调用App.exit或System.exit。如果数据库服务器不可用,只有原因或类似问题,您可以执行以下操作
1.写一个实现ServletContextListener的ContextListner
1.在contextInitialized方法上检查必要的应用程序初始化配置,如设置DB连接,默认配置等,
1.如果在上下文初始化过程中出现任何错误,请通知servlet和jsp页面应用程序尚未准备好,并重定向到错误页面。
同样使用tomcat管理器,你可以在tomcat容器中启动/停止/部署任何web应用。

相关问题