我们有一个在Tomcat服务器上运行的spring web应用程序,如果webapp的启动存在问题,我们希望只运行一些额外的代码。
但是,我们收到的任何错误都来自Bean Creation Issues(希望我们会在发布之前捕获)或者Flyway升级脚本问题。在这两种情况下,异常都会在Spring核心内部被捕获,并且我希望在webapp失败完成之前在这些情况下运行一些额外的代码。我不是100%确定如何设置它,考虑抛出异常的位置。
我一直在关注Spring的生命周期配置注释,虽然我已经考虑在我们提供的@PreDestroy方法中运行代码,但这意味着它每次都会运行我们的代码我们重新启动了webapp,而不仅仅是启动失败。有没有办法使用生命周期注释来指示正常关闭和启动失败之间的差异?
答案 0 :(得分:2)
您可以注册自己的ServletContextListener
而不是Spring的contextInitialized
方法调用委托给用于加载Spring上下文的Spring实现(无论您使用哪一个,例如org.springframework.web.context.ContextLoaderListener
)。
然后捕捉并处理所需的例外情况。