線程變量ThreadLocal的使用


我們有時候會通過token進行多次查詢(豬:token是redis中的key),比如:

一次是在登錄攔截器中,一次是在controller的業務中查詢,這樣存在性能和資源的浪費問題!!!

那么如何將攔截器中的數據傳遞到Controller中呢?

有兩種方案:

    1,將User對象放置到request對象中

    2,使用ThreadLocal線程變量實現(在進入tomcat和產生響應前,對象都處於同一個線程中)

實現:

1,定義一個ThreadLocal相關的類


public class UserThreadLocal {
private static ThreadLocal<User> USER_LOCAL = new ThreadLocal<>();

  //對外提供set和get方法
  public static void setUser(User user){
    USER_LOCAL.set(user);
  }
  public static User getUser(){
    return USER_LOCAL.get();
  }
}

2,在登陸攔截器中將User對象放置到ThreadLocal中

  //查詢到用戶,將用戶放入到ThreadLocal中
  UserThreadLocal.setUser(user);

3,在Service中可以通過ThreadLocal獲取User  

  //從ThreadLocal線程變量中獲取User對象
  User user = UserThreadLocal.getUser();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM