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

时间:2016-02-29 06:37:59

标签: tomcat

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

FYI

答案在" Shutdown tomcat using web application deployed in it"是关闭整个集装箱。这里的问题是关闭(或临时禁用)单个Web应用程序。

2 个答案:

答案 0 :(得分:4)

您可以使用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 vars。此示例将关闭部署如下的应用程序:

hxxp://localhost:8080/MyApplicationName

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

答案 1 :(得分:1)

通常我们不会在Web应用程序中调用App.exit或System.exit。如果数据库服务器不可用,只有类似问题的原因或类型,您可以执行以下操作

  1. 编写一个ContextListner implmenting ServletContextListener
  2. on contextInitialized方法检查必要的应用程序初始化配置,如设置数据库连接,默认配置等,
  3. 包含上下文初始化中的任何错误,让您的servlet和jsp页面通知应用程序尚未就绪并重定向到错误页面。
  4. 同样使用tomcat管理器,您可以在tomcat容器中启动/停止/部署任何Web应用程序。