问题描述
我有一个实现 ServletContextListener
的类,它在启动时加载一些资源.
I have a class implementing ServletContextListener
that loads some resources upon startup.
这些资源对应用程序至关重要,当我的逻辑中发生一些不良事件时,我希望整个启动失败.
Those resources are critical to the application in a way that I would like to fail the whole startup when some bad event happens in my logic.
是否可以从 ServletContextListener.contextInitialized()
方法内部执行任何命令来停止和失败整个 Tomcat 启动?
Is there any command I can execute from inside the ServletContextListener.contextInitialized()
method to stop and fail the whole Tomcat startup?
推荐答案
尝试指定:
-Dorg.apache.catalina.startup.EXIT_ON_INIT_FAILURE=true
在您的 java
运行时选项中,引用 官方文档:
in your java
runtime options, quoting official documentation:
如果为true,如果在服务器初始化阶段发生异常,服务器将退出.
如果未指定,将使用默认值 false.
If not specified, the default value of false will be used.
更新:
如果你想通过代码来做到这一点,System.exit()
会起作用吗?
If you want to do this by code, will System.exit()
work?
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) {
}
}
您可以使用 decorator 模式来包装现有的听众而不会使他们杂乱无章.不知道 Tomcat 会如何反应你...
You can use decorator pattern to wrap existing listeners without cluttering them. Not sure how will Tomcat react thou...
这篇关于如何在 ServletContextListener 中出现异常时中止 Tomcat 启动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!