伺机待发 2021-03-17 16:01 采纳率: 0%
浏览 36

在JAVA WEB,static属性的生命周期是和web容器共存,一直储存在内存中?

以前做内部项目与企业微信集成,获取access_token的时候专门用一个class 定义了一个 static 字段属性储存access_token值 并且这个 access_token没有做持久化(存入redis、或者db),请大佬分析下我这样的方案会有access_token内存泄漏的风险吗?(比如该字段属性失效 提前被GC回收) 或者在web并发请求下TokenStroe是否安全    下面有伪代码

class TokenStore{
    private static Map tokenMap
    static {

     Map tokenMap =  WXUtil.Post(url,corpId...)
    }
    
    //Web容器启动的时候随着.class的加载 直接去先获取一次ACCESS_TOKEN
    public static String ACCESS_TOKEN = tokenMap.get("ACCESS_TOKEN"); 
    public static String EXPIRE_TIME = tokenMap.get("EXPIRE_TIME");

}


//消费 token 伪代码

public List<User> getUserList(){
     String token = null;
    
     //null代表token过期或者没有初始化 在次使用WXUtil重新获取token 
    if(TokenStore.EXPIRE_TIME == null || System.currenttime()-ACCESS_TOKEN.EXPIRE_TIME > 7100){
        synchronized(TokenStore.class){
            if(TokenStore.EXPIRE_TIME == null || System.currenttime()-ACCESS_TOKEN.EXPIRE_TIME > 7100){
                TokenStore.EXPIRE_TIME =  WXUtil.Post(url,corpId...).get("EXPIRE_TIME");
                TokenStore.ACCESS_TOKEN =  WXUtil.Post(url,corpId...).get("ACCESS_TOKEN");
            } 
        }//end syn
     }

    token = TokenStore.ACCESS_TOKEN;
    
    List list = WXUtil.getUserList(url,token);
     
   
    return list ;
}
  • 写回答

1条回答 默认 最新

  • 张小帅和刘美美 2021-03-17 18:37
    关注

    不要怕 这样不会出问题的

    评论

报告相同问题?

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探