Browse Source

fix bug

release_toaliyun_real
xiaohanzi 6 years ago
parent
commit
ab7d0050d7
1 changed files with 84 additions and 84 deletions
  1. +84
    -84
      mallinkCApi/src/main/java/com/iformall/aop/RedisCacheAspect.java

+ 84
- 84
mallinkCApi/src/main/java/com/iformall/aop/RedisCacheAspect.java View File

@@ -56,90 +56,90 @@ public class RedisCacheAspect {

@Around("cacheAspect()")
public Object round(ProceedingJoinPoint jp) throws Throwable {
// HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// // 查询token信息
// //从header中获取token
// String token = request.getHeader("token");
// //如果header中不存在token,则从参数中获取token
// if (StringUtils.isBlank(token)) {
// token = request.getParameter("token");
// }
// log.info("token>>>>>>>>>>>>>>>"+token);
// String tenantId;
// WxCUser wxCUser = null ;
// if(StringUtils.isNotBlank(token)) {
// wxCUser = userTokenService.getByToken(token);
// }
// if (Objects.isNull(wxCUser) || wxCUser.getExpireTime().getTime() < System.currentTimeMillis()) {
// tenantId = "0";
// } else {
// tenantId = wxCUser.getTenantId();
// }
//
// // 请求参数
// Object[] args = jp.getArgs();
// // 接口 返回结果
// Object result;
// String redisKey;
//
// //得到注释的名称
// MethodSignature signature = (MethodSignature) jp.getSignature();
// //判断tag是否在用户权限中 如果存在加入参数查询
// Method method = signature.getMethod();
// RedisCache cache = method.getAnnotation(RedisCache.class) ;
// if (cache.autoKey()) {
// // 构建 redisKey => reqPath:tenantId:md5(param1_param2_param3)
// String requestUrl = request.getRequestURI();
// // 接口路径 reqPath => /api/xxx
// String reqPath = requestUrl.substring(requestUrl.indexOf("/api/"));
// if (cache.md5()) {
// String md5Before = StringUtils.join(args, DELIMITER_PARAMS);
// redisKey = StringUtils.join(reqPath, DELIMITER_KEY, tenantId, DELIMITER_KEY, HashUtil.md5(StringUtils.join(token, md5Before, DELIMITER_PARAMS)));
// } else {
// redisKey = StringUtils.join(reqPath, DELIMITER_KEY, tenantId, DELIMITER_KEY, StringUtils.join(token,args, DELIMITER_PARAMS));
// }
// } else {
// redisKey = cache.key();
// }
//
// // redisKey 不存在,获取接口数据并返回
// if (StringUtils.isBlank(redisKey)) {
// result = jp.proceed(args);
// } else {
// ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
// String value = valueOperations.get(redisKey);
// if (value == null) {
// String lockKey = StringUtils.join(redisKey, ":", "lock");
// long time = System.currentTimeMillis() + 2000;
// String timeStr = String.valueOf(time);
// try {
// //分布式锁,保证一个线程读DB,其它线程排队
// if (redisLock.lock2(lockKey, timeStr)) {
// log.debug("CacheAspect 读库中, key:{}: " + lockKey);
// result = jp.proceed(args);
// String json_data = JSONObject.toJSONString(result);
// valueOperations.set(redisKey, json_data, cache.expireTime(), cache.dateUnit());
// log.debug("CacheAspect 缓存不存在,获取接口数据并放入缓存,key:{}, expire:{}", redisKey, cache.expireTime());
// } else {
// log.debug("CacheAspect 读库等待中, key:{}: " + lockKey);
// Thread.sleep(2000);
// value = valueOperations.get(redisKey);
// result = parseCache(jp, redisKey, value);
// }
// } catch (Throwable throwable) {
// log.error("CacheAspect proceed error , Illegal argument: {} in {}.{}()", Arrays.toString(jp.getArgs()),
// jp.getSignature().getDeclaringTypeName(), jp.getSignature().getName(), throwable);
// throw throwable;
// } finally {
// redisLock.unlock(lockKey, timeStr);
// }
// } else {
// result = parseCache(jp, redisKey, value);
// }
// // 计数器
// stringRedisTemplate.opsForHash().increment("hotapi", redisKey, 1);
// }
// return result;
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 查询token信息
//从header中获取token
String token = request.getHeader("token");
//如果header中不存在token,则从参数中获取token
if (StringUtils.isBlank(token)) {
token = request.getParameter("token");
}
log.info("token>>>>>>>>>>>>>>>"+token);
String tenantId;
WxCUser wxCUser = null ;
if(StringUtils.isNotBlank(token)) {
wxCUser = userTokenService.getByToken(token);
}
if (Objects.isNull(wxCUser) || wxCUser.getExpireTime().getTime() < System.currentTimeMillis()) {
tenantId = "0";
} else {
tenantId = wxCUser.getTenantId();
}
// 请求参数
Object[] args = jp.getArgs();
// 接口 返回结果
Object result;
String redisKey;
//得到注释的名称
MethodSignature signature = (MethodSignature) jp.getSignature();
//判断tag是否在用户权限中 如果存在加入参数查询
Method method = signature.getMethod();
RedisCache cache = method.getAnnotation(RedisCache.class) ;
if (cache.autoKey()) {
// 构建 redisKey => reqPath:tenantId:md5(param1_param2_param3)
String requestUrl = request.getRequestURI();
// 接口路径 reqPath => /api/xxx
String reqPath = requestUrl.substring(requestUrl.indexOf("/api/"));
if (cache.md5()) {
String md5Before = StringUtils.join(args, DELIMITER_PARAMS);
redisKey = StringUtils.join(reqPath, DELIMITER_KEY, tenantId, DELIMITER_KEY, HashUtil.md5(StringUtils.join(token, md5Before, DELIMITER_PARAMS)));
} else {
redisKey = StringUtils.join(reqPath, DELIMITER_KEY, tenantId, DELIMITER_KEY, StringUtils.join(token,args, DELIMITER_PARAMS));
}
} else {
redisKey = cache.key();
}
// redisKey 不存在,获取接口数据并返回
if (StringUtils.isBlank(redisKey)) {
result = jp.proceed(args);
} else {
ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();
String value = valueOperations.get(redisKey);
if (value == null) {
String lockKey = StringUtils.join(redisKey, ":", "lock");
long time = System.currentTimeMillis() + 2000;
String timeStr = String.valueOf(time);
try {
//分布式锁,保证一个线程读DB,其它线程排队
if (redisLock.lock2(lockKey, timeStr)) {
log.debug("CacheAspect 读库中, key:{}: " + lockKey);
result = jp.proceed(args);
String json_data = JSONObject.toJSONString(result);
valueOperations.set(redisKey, json_data, cache.expireTime(), cache.dateUnit());
log.debug("CacheAspect 缓存不存在,获取接口数据并放入缓存,key:{}, expire:{}", redisKey, cache.expireTime());
} else {
log.debug("CacheAspect 读库等待中, key:{}: " + lockKey);
Thread.sleep(2000);
value = valueOperations.get(redisKey);
result = parseCache(jp, redisKey, value);
}
} catch (Throwable throwable) {
log.error("CacheAspect proceed error , Illegal argument: {} in {}.{}()", Arrays.toString(jp.getArgs()),
jp.getSignature().getDeclaringTypeName(), jp.getSignature().getName(), throwable);
throw throwable;
} finally {
redisLock.unlock(lockKey, timeStr);
}
} else {
result = parseCache(jp, redisKey, value);
}
// 计数器
stringRedisTemplate.opsForHash().increment("hotapi", redisKey, 1);
}
return result;
return null;
}



Loading…
Cancel
Save