1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 定时获取AccessToken——萤石开放平台

定时获取AccessToken——萤石开放平台

时间:2019-06-08 01:18:51

相关推荐

定时获取AccessToken——萤石开放平台

最近有一个项目,是使用萤石开放平台获取一些数据。但是遇到一个问题:获取到的AccessToken有效期只有7天,也就是说,每隔7天就要获取一次accessToken。

那么问题就来了:当一个项目部署之后,我们不可能在使用人工去获取accessToken,只能通过代码自动定时获取accessToken。那么怎样去自动获取?

对于自动获取accessToken,我们想到了使用多线程去获取AccessToken。具体思路:

1.写一个线程,在线程中实现定时获取accessToken。代码如下:

public class GetAccessTokenThread extends Thread {@Overridepublic 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 {@Overridepublic 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""/dtd/web-app_2_3.dtd" ><web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/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(也就是本文采用的方法)。其他方法可以参考:/s/blog_6810dfc1ipzq.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。