Web应用程序停止时停止Apache Tomcat

时间:2010-11-15 17:16:23

标签: tomcat tomcat6

情境:

Apache Tomcat 6.0是使用包含org.tanukisoftware.wrapper.WrapperStartStop的包装器(org.apache.catalina.startup.Bootstrap)在Windows Server 2008 R2上作为服务启动的。在Tomcat启动过程中,还启动了一个Web应用程序。 此Web应用程序需要连接到远程数据库并检查连接。如果数据库不可用,它会重试连接几次,然后在x次尝试后关闭。

问题:

当数据库连接不可用时,我需要在webapp退出后停止Apache Tomcat。

可能的解决方案:

  • 从Web应用程序中停止Apache Tomcat(已尝试关闭端口因为连接被拒绝而无效 - 使用独立的Java应用程序)
  • 从Web应用程序中调用外部Java应用程序
  • 如果唯一的Web应用程序关闭,请将Apache Tomcat配置为关闭 - 我找不到办法

有什么想法吗?也许是一种不同的方法?

问候

亚历山大

3 个答案:

答案 0 :(得分:1)

启动Tomcat时,您基本上会使用参数org.apache.catalina.startup.Bootstrap::main调用start。要停止Tomcat,请使用命令stop调用相同的类/方法。您不应该需要另一个Java进程,只需静态调用main方法。

参见Javadoc: http://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/org/apache/catalina/startup/Bootstrap.html

如果你不想依赖Tomcat libs,那就去做一些反思魔术。

答案 1 :(得分:1)

好的,我很确定这是一种不好的做法,但是和你一样,我一直无法找到更好的解决方案。

try{
    MBeanServer server = MBeanUtils.createServer();
    ObjectName name = new ObjectName("Catalina:type=Service,serviceName=Catalina");
    server.invoke(name, "stop", new Object[0], new String[0]);
} catch (Exception) {
     e.printStackTrace();
}

这基本上会告诉Catalina自杀。

答案 2 :(得分:1)

如果没有配置安全管理器,则从您的webapp中

System.exit(0)将关闭Tomcat实例。

从独立服务器运行,不确定它是否在作为Windows服务运行时有效。

编辑:虽然您可能想要阅读此内容:Calling System.exit() in Servlet's destroy() method