【发布时间】:2017-07-13 20:51:27
【问题描述】:
根据这个答案thread local variable,当我们使用线程本地时,我们应该清除线程池环境中的所有变量。
所以基本上我只想确认,当我们使用 MDC(映射诊断上下文)时,我们还应该清除 MDC 以了解内存泄漏,这是真的吗?
例如:
@Configuration
public class WebConfig implements WebMvcConfigurer {
public class HttpInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(final HttpServletRequest request,
final HttpServletResponse response,
final Object handler) {
MDC.put(SESSION_ID, session_id);
{
@Override
public void postHandle(final HttpServletRequest request,
final HttpServletResponse response,
final Object handler,
final ModelAndView modelAndView) {
MDC.clear(); //WE SHOULD CLEAR MDC.... if not memory leaks ?
}
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MdcHandlerInterceptor());
}
}
【问题讨论】:
-
我猜危险与其说是内存泄漏,不如说是一个请求无意中“继承”了前一个请求的 MDC 值。
标签: java spring logging log4j logback