我有一个实现ServletContextListener的类,该类在启动时会加载一些资源。

这些资源对于应用程序至关重要,因为当我的逻辑中发生一些不良事件时,我想使整个启动失败。

我可以从ServletContextListener.contextInitialized()方法内部执行任何命令来停止整个Tomcat启动并使其失败吗?

最佳答案

尝试指定:

-Dorg.apache.catalina.startup.EXIT_ON_INIT_FAILURE=true
java运行时选项中,引用official documentation:

更新:
如果要通过代码执行此操作,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) {
    }
}
您可以使用decorator模式来包装现有的监听器,而不会使它们困惑。不确定Tomcat会如何 react ?

10-07 19:42