问答详情
源自:2-3 access_token的获取(下)

access_token存入本地

怎么把access_token本地存写

提问者:慕粉3254756 2016-06-15 22:55

个回答

  • 6的
    2018-07-18 23:50:40

    您好  这两个方法该写在哪个类中呢

  • 忽职守
    2016-06-17 10:32:27

    我找到了一个方法,亲测有效的:

    写一个server  然后启动一个线程,线程里面定义一个全局静态变量,线程定时运行获取access_token,然后放到内存中,取的时候通过这个静态变量取就可以了。

    jar包自己找吧

    servlet----------
    public class InitServlet extends HttpServlet {    
        private static final long serialVersionUID = 1L;    
        private static Logger log = LoggerFactory.getLogger(WeixinUtil.class);
       
        public void init() throws ServletException {    
            // 获取web.xml中配置的参数 ,并初始化TokenThread.java中静态变量appid和appsecret
            TokenThread.appid = getInitParameter("appid");    
            TokenThread.appsecret = getInitParameter("appsecret");
            
            // web.xml未配置appid、appsecret时给出提示    
            if ("".equals(TokenThread.appid) || "".equals(TokenThread.appsecret)) {    
                log.error("请在web.xml的InitServlet中设置appid、appsecret参数"); 
            } else {
                // 启动定时获取access_token的线程    
                new Thread(new TokenThread()).start();
            }    
        }    
    }
    注意在web.xml配置参数appid ,appsecret


    线程=-----------
    public class TokenThread implements Runnable {
    	private static Logger log = LoggerFactory.getLogger(TokenThread.class);
    	// 第三方用户唯一凭证,从InitServlet中赋值
    	public static String appid = "";
    	// 第三方用户唯一凭证密钥,从InitServlet中赋值
    	public static String appsecret = "";
    	public static AccessToken accessToken = null;
    	public void run(){
    		/**
    		 *定期获取token
    		 */
    		while (true) {
    			try {
    				//调用公众平台接口获取access_token;
    				accessToken = WeixinUtil.getAccessToken(appid,appsecret);
    				if (null != accessToken) {
    					log.info("获取access_token成功,有效时长{}秒 token:{}", accessToken.getExpiresIn(), accessToken.getToken());
    					// 休眠7000秒  
    					Thread.sleep((accessToken.getExpiresIn() - 200) * 1000);
    				} else {
    					// 如果access_token为null,60秒后再获取
    					Thread.sleep(60 * 1000);
    				}
    			} catch (InterruptedException e) {
    				try {
    					Thread.sleep(10 * 1000);
    				} catch (InterruptedException e1) {
    					System.out.println();
    				}
    				System.out.println();
    			}
    		}
    	}
    }
    
    
    其他类中取值:String token = TokenThread.accessToken.getToken();