は、私は、次のクラスがありますSpring MVC Webサイト内のThreadLocalオブジェクトを削除しますか?
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
}
ウェブサイトは、インターセプタでThreadLocalのオブジェクトを使用して開始したオブジェクトは、Webリクエスト全体を通して使用されています。
public class MyIntercepter extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
AppContext.get();
//.....
}
}
私はTomcat 8.xでこのWebサイトを実行していますが、ログに次のエラーメッセージがあることがわかりました。
この問題を解決するにはどうすればよいですか?
ありがとうございました!
20月 - 2016年22:43:53.657 SEVERE [ローカルホスト-startStop-2]は、Webアプリケーション[ROOT]はタイプのキーでThreadLocalのを作成org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks [my.organization .data.AppContext $ 1](値[[email protected]])およびタイプ[my.organization.data.AppContextData]の値(値[[email protected]]) Webアプリケーションが停止したときに削除に失敗しました。スレッドは時間の経過とともに更新され、メモリリークの可能性を回避しようとしています。
AppContext.unset()が呼び出されていることを確認してください。 Tomcatは、明示的にThreadLocalを削除することを望みます。 – JanPl