我们有一个在 Tomcat 服务器上运行的 spring web 应用程序,我们希望只有在 web 应用程序的启动出现问题时才运行一些额外的代码。
但是,我们收到的任何错误都将来自 Bean 创建问题(希望我们能在发布之前发现)或 Flyway 升级脚本问题。在这两种情况下,异常都在某个地方的 spring 核心中被捕获,我想在 webapp 失败完成之前在这些情况下运行一些额外的代码。不过,考虑到抛出异常的位置,我不是 100% 确定如何设置它。
我一直在查看 Spring 的生命周期配置注释,虽然我考虑过在我们提供的 @PreDestroy 方法中运行代码,但这意味着它会在我们每次重新启动 webapp 时运行我们的代码,而不仅仅是关于启动失败。有没有一种方法可以使用生命周期注释来指示正常关闭和失败启动之间的差异?
最佳答案
您可以注册自己的 ServletContextListener
而不是 Spring 的,并将 contextInitialized
方法调用委托(delegate)给您用于加载 Spring 上下文的 Spring 实现(无论您使用哪个,对于例如 org.springframework.web.context.ContextLoaderListener
).
然后捕获并处理所需的异常。
关于java - 有没有办法让 spring 在应用程序启动失败时运行额外的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32315001/