定时获取AccessToken——萤石开放平台
程序员文章站
2022-03-05 14:49:15
...
最近有一个项目,是使用萤石开放平台获取一些数据。但是遇到一个问题:获取到的AccessToken有效期只有7天,也就是说,每隔7天就要获取一次accessToken。
那么问题就来了:当一个项目部署之后,我们不可能在使用人工去获取accessToken,只能通过代码自动定时获取accessToken。那么怎样去自动获取?
对于自动获取accessToken,我们想到了使用多线程去获取AccessToken。具体思路:
1.写一个线程,在线程中实现定时获取accessToken。代码如下:
public class GetAccessTokenThread extends Thread {
@Override
public void run() {
String appKey = "*********";
String appSecret = "**********";
GetToken getToken = new GetToken(appKey,appSecret);//GetToken是自己的获取getToken的类
TokenPojo token = new TokenPojo();//TokenPojo在下面代码中介绍
while (true) {
try {
BasicResponse<AccessToken> response = getToken.executeApi();
token.setAccessToken(response.getData().getAccessToken());
System.out.println("token="+token.getAccessToken());
Thread.sleep("设置每个多少毫秒请求一次");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
其中的TokenPojo类是我用于保存accessToken的类。其中的accessToken变量设置成了static。因为这样是因为accessToken变量就属于类了,为所有对象所共有。这样就不用去设置单独的数据库或者缓存去存储accessToken的值(因为只有一个变量)。代码如下:
public class TokenPojo {
private static String accessToken = "at.38s4iyczacw2eet7b3yyubgl912t0pz1-2rsetdrwx6-1xeqgcb-fvpvhhoev";
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
}
2. 写一个servlet去开启这个线程。
public class initServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("************初始化initServlet****************");
Thread getTokenThread = new GetAccessTokenThread();
getTokenThread.start();
super.init();
}
}
3. 在web.xml中去配置servlet,设置成启动tomcat时就启动该线程,然后每个一定时间就会去执行一个该线程(自动获取一次请求得到accessToken)
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>initServlet</servlet-name>
<servlet-class>com.wsn.restful.servlet.initServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
大概思路使用图解方式去理解:
其实:tomcat启动时,后台自动启动一个线程的方式有很多种:一种是listener,另外一种是servlet(也就是本文采用的方法)。其他方法可以参考:http://blog.sina.com.cn/s/blog_6810dfc20101ipzq.html
推荐阅读
-
入驻淘宝开放平台及获取SDK的基本教程
-
如何获取微信开放平台的预授权码?
-
如何获取微信开放平台的预授权码?
-
微信开放平台获取component_verify_ticket,cas客户端获取ticket_PHP教程
-
微信开放平台获取component_verify_ticket - LazyCat_Ky
-
微信开放平台获取component_verify_ticket,cas客户端获取ticket
-
微信开放平台获取component_verify_ticket - LazyCat_Ky
-
IOS最新新浪微博开放平台Oauth2.0授权获取Access
-
微信开放平台获取component_verify_ticket password verify winverifytrust openssl verify ph
-
微信开放平台获取component_verify_ticket password verify winverifytrust openssl verify ph