access_token存入本地
怎么把access_token本地存写
怎么把access_token本地存写
2016-06-15
我找到了一个方法,亲测有效的:
写一个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();举报