diff --git a/user-service/src/main/java/com/mh/user/service/wechat/impl/WechatServiceImpl.java b/user-service/src/main/java/com/mh/user/service/wechat/impl/WechatServiceImpl.java index dbf665b..0ea645a 100644 --- a/user-service/src/main/java/com/mh/user/service/wechat/impl/WechatServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/wechat/impl/WechatServiceImpl.java @@ -17,6 +17,7 @@ import org.springframework.web.client.RestTemplate; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.concurrent.TimeUnit; /** @@ -44,6 +45,18 @@ public class WechatServiceImpl implements WechatService { return wechatMapper.queryWechatUser(projectId); } + public String getAccessToken(CacheUtil instance) { + String tokenResult = restTemplate.getForObject(wechatMpConfig.getAccessTokenUrl(),String.class); + JSONObject jsonObj = JSONObject.parseObject(tokenResult); + if (jsonObj == null || !jsonObj.containsKey("access_token")) { + return ""; + } + String accessToken = jsonObj.get("access_token").toString(); + log.info("获取access_token==>{}", accessToken); + instance.createCache("accessToken", accessToken , 7000, TimeUnit.SECONDS); + return accessToken; + } + @Override public void PushMsg(PushMsgEntity pushMsgEntity) { // 判断cache中是否存在access_token @@ -51,17 +64,24 @@ public class WechatServiceImpl implements WechatService { Cache cache = instance.getCache("accessToken"); String accessToken = ""; if (cache != null ) { - log.info("cache中存在access_token,直接使用"); - accessToken = cache.getIfPresent("accessToken").toString(); + log.info("ConcurrentHashMap中存在access_token的cache,直接使用"); + // 再次判断是否存在access_token + if (cache.getIfPresent("accessToken") == null) { + log.info("cache中不存在access_token,重新获取"); + accessToken = getAccessToken(instance); + } else { + accessToken = Objects.requireNonNull(cache.getIfPresent("accessToken")).toString(); + } } else { String tokenResult = restTemplate.getForObject(wechatMpConfig.getAccessTokenUrl(),String.class); JSONObject jsonObj = JSONObject.parseObject(tokenResult); if (jsonObj == null || !jsonObj.containsKey("access_token")) { return; } - accessToken = jsonObj.get("access_token").toString(); - log.info("获取access_token==>{}", accessToken); - instance.createCache("accessToken", accessToken , 6000, TimeUnit.SECONDS); + accessToken = getAccessToken(instance); + } + if (accessToken.isEmpty()) { + return; } // 封装推送内容 JSONObject jsonObject = new JSONObject();