springboot设置定时更新的全局变量

为了安全,接口提供的数据时,往往都会采用携带登录token的方式去请求数据接口。而这个token也有较长的失效时长,所以每次调用接口,只需要登录一次获取到token后,在失效时间内多次使用同一个token就可以了,避免了每次请求接口还要重复的获取token,节省了时间和资源。

所以项目中关于这个会失效的token该怎么存储呢?存数据库?也行但是没那个必要。这种定时更新的token完全可以存到项目中的全局变量里。

下面以springboot项目为例,展示下该如何存储可变的tokenn信息。

这里采用的方案是:springboot自带的的Scheduled定时任务+全局变量,定时更新token,用到时直接获取这个全局变量即可。

直接放代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import com.alibaba.fastjson.JSONObject;
import org.jboss.logging.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Component
public class UnitCache {

private Logger logger = Logger.getLogger(getClass());
public static Map<String, String> codeMap = new HashMap<String, String>();

@Autowired
private LoginService loginService;

@PostConstruct
public void init() {
logger.info("更新【token】缓存开始-----------------------");
long startTime = System.currentTimeMillis();

token = loginService.getToken();
codeMap.put("token",token);
logger.info("token:" + token);

long endTime = System.currentTimeMillis();
logger.info("更新【token】缓存结束,耗时: " + (endTime - startTime) + "ms");
}

@PreDestroy
public void destroy() {
//系统运行结束
}

/**
* 这里是每2小时执行一次,更新token缓存
* 可以根据token有效时长进行更新
* @return
*/
@Scheduled(cron = "0 0 0/2 * * ?")
public void start() {
init();
}

}

其实还是很简单的,启动项目时定时任务就会自动执行,并更新token,然后根据设置的时间再去定时更新。

下面是获取这个全局变量的代码:

1
2
Map<String, String> codeMap = TokenCache.codeMap;
String token = codeMap.get("token");

pom需要引入的jar包

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

没啥技术含量,感觉又水了一篇文章


-------------本文结束感谢您的阅读-------------
感觉文章不错,就赏个吧!
0%