Redisson
private String getAccessToken() {
RLock lock = redissonClient.getLock(RedisConstant.getLockKey(RedisConstant.SCWJWXX_TOKEN_KEY));
boolean acquiredLock = false;
String accessToken = "";
try {
acquiredLock = lock.tryLock(Constant.INT_FIVE, Constant.INT_TEN, TimeUnit.SECONDS);
if (acquiredLock) {
accessToken = redisUtil.get(RedisConstant.SCWJWXX_TOKEN_KEY);
if (StrUtil.isBlank(accessToken)) {
getToken();
accessToken = redisUtil.get(RedisConstant.SCWJWXX_TOKEN_KEY);
}
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
// 只有成功获得锁的情况下才去执行解锁操作
if (acquiredLock) {
lock.unlock();
}
}
if (StrUtil.isBlank(accessToken)) {
throw new CommonException(CMEnum.ERROR, "定时任务:监管无法获取token");
}
return accessToken;
}
使用Redission去获取锁;
尝试获取锁,最多等待5秒,获取成功后,最多持有10秒;
获取成功,才会解锁;