我正在运行一个使用tomcat作为容器的应用程序-在启动时,需要找到并加载几个文件。但是,如果这些文件之一不存在或无法读取,我想记录异常并退出应用程序,这是我目前正在使用System.exit(1)进行的操作……但是,有没有更好的选择?这样的方式?
任何帮助深表感谢!
我不知道这是否适合您的需求,但它确实适用于我的应用程序。如果在您的web.xml中声明了侦听器,则在应用程序启动时调用该侦听器:
<listener>
<listener-class>your.package.TestServletListener</listener-class>
</listener>
您可以在那里进行测试,如果失败则调用ShutdownThread。它将连接到Tomcats的shutdown端口,并以String的形式发送shutdown命令:
public class TestServletListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("Starting app, running 5 tests ...");
// do tests ...
for (int i = 0; i < 5; i++) {
System.out.println("testing ... " + i);
waitFor(1000);
}
// If a test failed call:
System.out.println("test failed!");
new ShutdownTask().start();
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.print("Stopping app, cleaning up (takes 3 sec) ... ");
waitFor(3000);
System.out.println("done");
}
private void waitFor(int i) {
try {
Thread.sleep(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
class ShutdownTask extends Thread {
@Override
public void run() {
try {
Socket s = new Socket("127.0.0.1", 8015);
PrintStream os = new PrintStream(s.getOutputStream());
os.println("shutdown");
s.close();
System.out.println("Shutting down server ...");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
您需要确保shutdown port和shutdown命令与Tomcats server.xml同步:
...
<Server port="8015" shutdown="shutdown">
...
例如,您可以在web.xml中将它们作为上下文参数传递。像System.exit(...)一样,如果Tomcat与SecurityManager一起运行,这将无法工作(没有进一步的配置)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句