| @@ -56,90 +56,90 @@ public class RedisCacheAspect { | |||||
| @Around("cacheAspect()") | @Around("cacheAspect()") | ||||
| public Object round(ProceedingJoinPoint jp) throws Throwable { | 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; | return null; | ||||
| } | } | ||||