欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

定时获取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>

大概思路使用图解方式去理解:

定时获取AccessToken——萤石开放平台
 其实:tomcat启动时,后台自动启动一个线程的方式有很多种:一种是listener,另外一种是servlet(也就是本文采用的方法)。其他方法可以参考:http://blog.sina.com.cn/s/blog_6810dfc20101ipzq.html