当前位置: 首页 > 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.dtcms.com/a/199221.html

相关文章:

  • 超小多模态视觉语言模型MiniMind-V 训练
  • OV7670连接STM32F407VET
  • Java迭代器知识点详解
  • 从编程助手到AI工程师:Trae插件Builder模式实战Excel合并工具开发
  • 在CentOS系统上部署GitLabRunner并配置CICD自动项目集成!
  • 《算法导论(第4版)》阅读笔记:p86-p90
  • Windows逆向工程提升之二进制分析工具:HEX查看与对比技术
  • 自制操作系统day4(c指针)(指针和数组)(CLI和STI)(EFLAGS)
  • 力扣刷题Day 50:接雨水(42)
  • 你的it管理员已经限制对此应用一些区域的访问
  • MySQL进阶篇-InnoDB引擎(超细)
  • MySQL死锁:面试通关“三部曲”心法
  • Linux的权限问题
  • 【SPIN】PROMELA语言编程入门同步机制(SPIN学习系列--4)
  • std::ranges::iota
  • R²AIN SUITE 亮相第九届智能工厂高峰论坛
  • [CSS3]属性增强2
  • 卷积神经网络中的局部卷积:原理、对比与应用解析
  • PHP 实现连续子数组的最大和、整数中1出现的次数
  • [ 计算机网络 ] | 宏观谈谈计算机网络
  • Ultralytics YOLO11模型预测初体验(+实例+亲测)
  • OSD原理以及模块的讲解
  • java基础-多态性
  • [[春秋云境] Privilege仿真场景
  • R语言+贝叶斯网络:涵盖贝叶斯网络的基础、离散与连续分布、混合网络、动态网络,Gephi可视化,助你成为数据分析高手!
  • 【成品设计】基于51单片机实物系列项目
  • 什么是Monorepo(单体仓库)(monolithic repository)
  • vuex的基本使用
  • 类和对象(3)--《Hello C++ World!》(5)(C/C++)--构造函数,析构函数和拷贝构造函数
  • JavaWeb:文件上传(本地存储阿里云oss)