我有一个实现了 ServletContextListener
接口的类,在启动时加载了一些资源。
这些资源对应用程序非常重要,如果我的逻辑中发生了某些糟糕的事件,我希望整个启动过程都失败。
在 ServletContextListener.contextInitialized()
方法内部,是否有任何命令可以执行来停止并使整个Tomcat启动失败?
尝试指定:
-Dorg.apache.catalina.startup.EXIT_ON_INIT_FAILURE=true
java
运行时选项中,引用官方文档:
如果为true,则服务器在服务器初始化阶段发生异常时将退出。
如果未指定,则将使用默认值false。
更新:
如果您想通过代码实现此功能,System.exit()
是否有效?
public class FailFastListener implements ServletContextListener {
private static final Logger log = LoggerFactory.getLogger(FailFastListener.class);
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
try {
//initialization
} catch(Exception e) {
log.error("Sooo bad, shutting down", e);
System.exit(1);
}
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
ServletContextListener
中调用它是完全可以的。 - turbanoff
System.exit()
才是唯一的解决方案。毕竟,除非你正在编写唯一部署的应用程序,否则不应该中止Tomcat启动。然而,确保每个Tomcat仅有一个应用程序的最佳方法是使用内嵌式一个。我认为这是正确的做法。请看这篇文章:http://www.beyondjava.net/blog/application-servers-sort-of-dead/ - L. Holanda