ThreadLocal作一个缓存工具类

发布于:2025-05-20 ⋅ 阅读:(11) ⋅ 点赞:(0)

1、工具类



import java.util.HashMap;
import java.util.Map;

public class ThreadLocalUtil {

    // 使用Map存储多类型数据
    private static final ThreadLocal<Map<String, Object>> CONTEXT_HOLDER = new ThreadLocal<>();

    // 存储数据
    public static void set(String key, Object value) {
        Map<String, Object> map = CONTEXT_HOLDER.get();
        if (map == null) {
            map = new HashMap<>();
            CONTEXT_HOLDER.set(map);
        }
        map.put(key, value);
    }

    // 获取数据
    public static <T> T get(String key, Class<T> clazz) {
        Map<String, Object> map = CONTEXT_HOLDER.get();
        if (map == null) return null;
        return clazz.cast(map.get(key));
    }

    // 清理数据
    public static void remove() {
        CONTEXT_HOLDER.remove();
    }

}

2、请求结束后清除缓存,防止内存泄露


import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class ThreadLocalInterceptor implements HandlerInterceptor {

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        ThreadLocalUtil.remove(); // 请求结束清理数据
    }

}

3、将拦截器添加到Spring Boot当中



import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private ThreadLocalInterceptor threadLocalInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(threadLocalInterceptor);
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到