首页 > 其他分享 >springboot3+vue3(四.2)ThreadLocal优化

springboot3+vue3(四.2)ThreadLocal优化

时间:2024-03-06 16:14:26浏览次数:23  
标签:拦截器 THREAD ThreadLocal static springboot3 vue3 LOCAL public

解决痛点:

我们在拦截器内已经获取并解析了一遍token数据,如图:

然后在获取当前登录用户详细信息时又做了一遍同样的操作,如图:

后续如果说需要用到当前登录用户的信息时都要带上token参数,这样是很冗余的。这时就会用到 ThreadLocal 来进行优化处理。

 

ThreadLocal工具类

/**
 * ThreadLocal 工具类
 */
@SuppressWarnings("all")
public class ThreadLocalUtil {
    //提供ThreadLocal对象,
    private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();

    //根据键获取值
    public static <T> T get(){
        return (T) THREAD_LOCAL.get();
    }
    
    //存储键值对
    public static void set(Object value){
        THREAD_LOCAL.set(value);
    }


    //清除ThreadLocal 防止内存泄漏
    public static void remove(){
        THREAD_LOCAL.remove();
    }
}
ThreadLocal工具类

我们将工具类创建在 utils 包下

 

使用方法:

我们只需在拦截器内,把业务数据通过set方法存储到ThreadLocal中,使用时再通过get方法获取即可。

 

运行结果展示:

 

 

到此还未结束,当使用完后要即时清除 ThreadLocal 数据防止内存泄漏。

只需要在拦截器中的afterCompletion方法中清除ThreadLocal中的数据即可。

 

标签:拦截器,THREAD,ThreadLocal,static,springboot3,vue3,LOCAL,public
From: https://www.cnblogs.com/JoeYD/p/18056827

相关文章

  • Vue3.0里为什么要用 Proxy API 替代 defineProperty API ?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一、Object.defineProperty定义:Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象为什么能实现响应式通过defineProperty 两个属性,get及setget属性......
  • Vite 2.0 + Vue3 + Ts + Vant3移动端项目
    highlight:androidstudioVite2.0搭建Vue3移动端项目一.涉及技术点vitevue3tsroutervuexaxiosvant3移动端适配请求代理二.步骤vite+ts+vue3只需要一行命令npminit@vitejs/appmy-vue-app--templatevue-ts初始化项目npminstallnpmrundev**......
  • SpringBoot3整合Druid数据源的解决方案
    druid-spring-boot-3-starter目前最新版本是1.2.20,虽然适配了SpringBoot3,但缺少自动装配的配置文件,会导致加载时报加载驱动异常。<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.20</version......
  • 详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia)
    详细vite创建vue3项目(vue3+vue-router+ts+vite+element-plus+pinia):https://blog.csdn.net/qq_44423029/article/details/126378199?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170891147716800185818285%2522%252C%2522scm%2522%253A%252220140713.130102334..%2......
  • InheritableThreadLocal 使用举例
    ThreadLocalpublicclassMyThreadextendsThread{privateThreadLocal<String>threadLocal=newThreadLocal<>();publicvoidrun(){threadLocal.set("ThreadLocalvalueinMyThread");System.out.println(&quo......
  • TransmittableThreadLocal 如何解决在分布式环境下线程池中使用ThreadLocal的问题
    在分布式环境下,线程池中使用ThreadLocal会出现线程安全问题,因为线程池中的线程是可以被多个请求共享的,当多个请求同时访问同一个ThreadLocal变量时,会出现数据互相干扰的问题。为了解决这个问题,Java提供了TransmittableThreadLocal类。TransmittableThreadLocal是ThreadLocal的一......
  • vite+vue3 遇到报错 Uncaught SyntaxError: Cannot use import statement outside a m
    按照报错找到了对应的位置import{createApp}from'/node_modules/.vite/deps/vue.js?v=d0a669cf'importAppfrom'/src/pages/project1/App.vue'//import'./index.css'//importrouterfrom"./router"//createApp(App).mount(&#......
  • 管理端根据角色,获取动态路由,动态引用页面的时候,Vue2和vue3的使用方法
    1、vue2使用的方法,重点注意引用组件的时候使用的requirelettemp=[];children.map((itemChild)=>{letvisible=(itemChild.menuType=='F')?true:false;temp.push({path:itemChild.path,component:resolve=>require([@/views/${itemChild.component}],resolve),meta:......
  • springboot3+vue3(三)接口参数校验Spring Validation框架
    1、引入Validation依赖<!--参数校验依赖validation--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>va......
  • springboot3+vue3(二)注册接口
     为了方便实体类操作,这里添加一下lombok的依赖,添加好以后右键重新加载mavenlombok注解含义大全:https://www.jianshu.com/p/41c4a226e955<!--lombok依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifa......