情境:
Apache Tomcat 6.0是使用包含org.tanukisoftware.wrapper.WrapperStartStop
的包装器(org.apache.catalina.startup.Bootstrap
)在Windows Server 2008 R2上作为服务启动的。在Tomcat启动过程中,还启动了一个Web应用程序。
此Web应用程序需要连接到远程数据库并检查连接。如果数据库不可用,它会重试连接几次,然后在x次尝试后关闭。
问题:
当数据库连接不可用时,我需要在webapp退出后停止Apache Tomcat。
可能的解决方案:
有什么想法吗?也许是一种不同的方法?
问候
亚历山大
答案 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)
System.exit(0)
将关闭Tomcat实例。
从独立服务器运行,不确定它是否在作为Windows服务运行时有效。
编辑:虽然您可能想要阅读此内容:Calling System.exit() in Servlet's destroy() method