首页 > 解决方案 > 应该实现并使用哪个 HandlerInterceptorAdapter 方法来清除 ThreadLocal?

问题描述

我已经编写了 HandlerInterceptorAdapter 的实现。它将一些特定于请求的数据放在 ThreadLocal 中。因为线程被重新用于新请求,所以在处理请求时必须删除放在 ThreadLocal 中的数据。我应该实现哪个 HandlerInterceptorAdapter 方法来清除它?我看到有两个选项,postHandle 和 afterCompletion。我需要保证 ThreadLocal 中的数据被删除。

标签: javaspringspring-bootthread-local

解决方案


使用afterCompletion. 任何结果都会调用它

请求处理完成后的回调,即渲染视图后。将在处理程序执行的任何结果上调用,从而允许适当的资源清理

参考

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerInterceptor.html

笔记

  • 如果您要从中返回falsepreHandle则应在预句柄本身中清理本地线程,因为这false意味着您已经处理了响应,因此postHanlde()afterCompletion不会被调用

推荐阅读