当前位置: 首页 > news >正文

ThreadLocal作一个缓存工具类

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 {@Overridepublic 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 {@Autowiredprivate ThreadLocalInterceptor threadLocalInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(threadLocalInterceptor);}
}

http://www.xdnf.cn/news/523945.html

相关文章:

  • 【聚类】层次聚类
  • 三键标准、多键usb鼠标数据格式
  • 从产品展示到工程设计:3DXML 转 STP 的跨流程数据转换技术解析
  • WPF中的ObjectDataProvider:用于数据绑定的数据源之一
  • Regmap子系统之六轴传感器驱动-编写icm20607.c驱动
  • 【云实验】Excel文件转存到RDS数据库
  • 【大数据】MapReduce 编程--索引倒排--根据“内容 ➜ 出现在哪些文件里(某个单词出现在了哪些文件中,以及在每个文件中出现了多少次)
  • .NET 函数:检测 SQL 注入风险
  • 关于能管-虚拟电厂的概述
  • Win10 安装单机版ES(elasticsearch),整合IK分词器和安装Kibana
  • 【android bluetooth 协议分析 01】【HCI 层介绍 8】【ReadLocalVersionInformation命令介绍】
  • 【Android构建系统】Soong构建系统,通过.bp + .go定制编译
  • MySQL 故障排查与生产环境优化
  • verify_ssl 与 Token 验证的区别详解
  • Node 服务监控及通过钉钉推送告警提醒
  • 3.安卓逆向2-安卓文件目录
  • WPF点击按钮弹出一个窗口
  • 深入理解 Hadoop 核心组件 Yarn:架构、配置与实战
  • 物联网简介:万物互联的未来图景
  • Eclipse Java 开发调优:如何让 Eclipse 运行更快?
  • Spring Cloud Seata 深度解析:原理与架构设计
  • 甘特图工具怎么选?免费/付费项目管理工具对比测评(2025最新版)
  • java中如何优雅处理多租户系统的查询?
  • Hexo的Next主题的Config文件内方便修改的参数(Chat-Gpt)
  • 多线程进阶
  • java每日精进 5.19【Excel 导入导出】
  • 使用Python将 Excel 中的图表、形状和其他元素导出为图片
  • YouTube视频字幕转成文章算重复内容吗?
  • FD+Mysql的Insert时的字段赋值乱码问题
  • ffmpeg 把一个视频复制3次