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

l3zydbqr  于 12个月前  发布在  Apache
关注(0)|答案(3)|浏览(219)

方案:

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

问题:

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

可能的解决方案:

  • 从Web应用程序中停止Apache Tomcat(已经尝试了关闭端口,但由于连接被拒绝而无法工作-使用独立的Java应用程序它可以工作)
  • 从Web应用程序中调用外部Java应用程序
  • 配置Apache Tomcat在唯一的Web应用程序关闭时关闭-我找不到这样做的方法

有什么想法吗?换个方式?

wqnecbli

wqnecbli1#

如果没有配置安全管理器,webapp中的System.exit(0)将关闭Tomcat示例。
从独立服务器工作,不确定它是否作为Windows服务运行时工作。
编辑:虽然你可能想读这个:Calling System.exit() in Servlet's destroy() method

oknrviil

oknrviil2#

当Tomcat启动时,您实际上使用参数start调用org.apache.catalina.startup.Bootstrap::main。要停止Tomcat,请使用命令stop调用相同的类/方法。您不需要另一个Java进程,只需静态调用main方法。
查看Javadoc:http://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/org/apache/catalina/startup/Bootstrap.html
如果您不想依赖于Tomcat库,只需执行一些反射魔术。

niknxzdl

niknxzdl3#

好吧,我很确定这是一个糟糕的方法,但像你一样,我一直无法想出一个更好的解决方案。

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 自杀。

相关问题