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

问题描述 投票:0回答:2

我想在我的网络应用程序中运行一些代码,以使应用程序停止。例如,如果数据库服务器不可用。 我想实现类似

App.exit()
类似于
System.exit()
的东西。

仅供参考

使用部署在其中的 Web 应用程序关闭 tomcat”中的答案是关于关闭整个容器。这里的问题是关于关闭(或暂时禁用)单个 Web 应用程序。

tomcat
2个回答
6
投票
您可以使用 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
除了“停止”之外,您还可以调用:“开始”或“重新加载”。


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

    编写一个 ContextListner 实现
  1. ServletContextListener
  2. 在 contextInitialized 方法上检查必要的应用程序初始化配置,例如设置数据库连接、默认配置等,
  3. 如果上下文初始化中出现任何错误,请通知您的 servlet 和 jsp 页面应用程序尚未准备好并重定向到错误页面。
还可以使用 tomcat 管理器启动/停止/部署 tomcat 容器中的任何 Web 应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.