当前位置: 首页 > 知识库问答 >
问题:

移除Spring MVC网站中的ThreadLocal对象?

吴镜
2023-03-14

我有以下课程:

public class AppContext {

    private static final ThreadLocal<AppContextData> contextHolder = new ThreadLocal<AppContextData>() {

        @Override
        protected AppContextData initialValue() {
            return new AppContextData();
        }
    };

    public static AppContextData get() {
        return contextHolder.get();
    }

    public static void unset() {
        contextHolder.remove();
    }
}

public class AppContextData {
   //many getter and setter methods
}
public class MyIntercepter extends HandlerInterceptorAdapter {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)  {

        AppContext.get();
        //..... 
    }
}

2016年5月20日22:43:53.657严重的[localhost-startStop-2]org.apache.catalina.loader.webappclassLoaderBase.checkthreadLocalMapforLeaks web应用程序[ROOT]创建了一个ThreadLocal,其键类型为[my.organization.data.appContext$1](值为[my.organization.data.appContext$1@31D4463A]),值为[my.organization.data.appContextData](值为线程将随着时间的推移而更新,以避免可能的内存泄漏

共有1个答案

韩季
2023-03-14

JanPi已经在评论中说了我们必须做什么。如果有人想知道怎么做,这里是:

public class MyIntercepter extends HandlerInterceptorAdapter {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)  {
        AppContext.get();
        //..... 
    }

    public void afterCompletion(
        HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        AppContext.unset();
    }

    public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
        // only relevant when a handler starts an asynchronous request.
        AppContext.unset();
    }
}

postHandle方法看起来不错,但afterCompletation更好,因为即使处理程序无法正确处理请求(也就是发生异常),也会调用它。

 类似资料:
  • 网页迁移是将网页从一个主机移动到另一个主机的过程。 这个过程是由于各种原因完成的,其中的一些原因是 - 您不再支持托管公司的支持 另一个托管的价格更便宜 实际托管计划不能满足您的需求了 所提供的技术已经不再有竞争力了等等 由于迁移是一个过程,因此需要采取以下步骤以最短的停机时间完成网页。 我们必须像前几章所讨论的那样完全备份网站代码网页和数据库。 上传新的托管备份文件。 解压公用文件夹中的文件。

  • 如何在打字稿中从数组中删除对象? 所以我想从所有对象中删除drug_id。我该如何实现呢?谢谢!

  • ThreadLocal类用于创建线程局部变量,这些变量只能由同一线程读取和写入。 例如,如果两个线程正在访问引用相同threadLocal变量的代码,则每个线程都不会看到由其他线程完成的对threadLocal变量的任何修改。 ThreadLocal方法 以下是ThreadLocal类中可用的重要方法列表。 Sr.No. 方法和描述 1 public T get() 返回当前线程的此线程局部变量副

  • 问题内容: 我正在将URL加载到Webview中以将其显示在我的应用中。我遇到的问题是,网站并非总是能识别出我是手机(为什么如此?)。如何强制Webview发送到我的手机网站?目前我正在那样做 但这行不通吗?因为我没有使用iPhone,所以行不通吗?我不认为这是原因,因为它只是设置用户代理… 这是相关的代码(不相关的代码仅包含诸如从意图中获取url和格式化字符串等数据) 我还为用户代理尝试了此字符

  • 问题内容: 我刚刚创建了我的第一个jQuery移动网站。 我想让那些使用手机查看“完整站点”的人自动转移到“移动站点”。但是,如果愿意,也可以单击链接来查看完整站点。 我不知道从哪里开始。我可以使用一些JavaScript吗? 问题答案: if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)

  • 编辑:这是scanner类正在读取的。txt文件的示例: 编辑:以下是术语类: