【问题标题】:Clean up method for spring boot application after request process请求处理后 Spring Boot 应用程序的清理方法
【发布时间】:2019-06-20 11:50:22
【问题描述】:

如何在 Spring Boot 应用程序中为清理数据(例如线程局部变量)实现请求完成过程后的清理方法

我尝试使用ServletRequestListener.requestDestroyed api,但在请求完成后它没有被命中

【问题讨论】:

    标签: java rest spring-boot httprequest thread-local


    【解决方案1】:

    一个可能的答案是您忽略了注册监听器。 Servlet javadocs 说:

    为了接收这些通知事件,必须在 Web 应用程序的部署描述符中声明实现类,使用 WebListener 进行注释,或者通过在 ServletContext 上定义的 addListener 方法之一进行注册。

    可能还有其他方法可以使用 Spring 来实现;例如使用处理程序拦截器;见Remove ThreadLocal object within a Spring MVC website?

    如果您使用的是普通 servlet(没有 Spring MVC 基础架构),另一种方法是在您的 servlet 的 service 方法或 doXxx 方法中进行清理。或者在 servlet 前面的 Filter 中。

    【讨论】:

    • 你是对的。我不得不将它注册为一个 bean.. ServletRequestListener 或 HandlerInterceptorAdapter 的最佳方法是什么?我认为 ServletRequestListener 很简单。我还发现 HandlerInterceptorAdapter 中的所有 api 都在控制器知道请求完成后完成工作。
    • 我对此没有意见。
    猜你喜欢
    • 2018-02-28
    • 2019-08-01
    • 2020-09-10
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    相关资源
    最近更新 更多