springboot3+vue3(四.2)ThreadLocal最佳化

一介桃白白發表於2024-03-06

解決痛點:

我們在攔截器內已經獲取並解析了一遍token資料,如圖:

然後在獲取當前登入使用者詳細資訊時又做了一遍同樣的操作,如圖:

後續如果說需要用到當前登入使用者的資訊時都要帶上token引數,這樣是很冗餘的。這時就會用到 ThreadLocal 來進行最佳化處理。

ThreadLocal工具類

springboot3+vue3(四.2)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中的資料即可。

相關文章