更新集群模式多次重复获取微信accessToken的问题

master
OPGame 7 years ago
parent f7d8811a23
commit e563f73f8b

@ -15,7 +15,6 @@ import org.redisson.api.RedissonClient;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
/** /**
* WxMaServiceImpl accessToken * WxMaServiceImpl accessToken
@ -40,23 +39,22 @@ public class WxMaServiceClusterImpl extends WxMaServiceImpl {
RLock rLock = redissonClient.getLock(REDISSON_LOCK_PREFIX + ":WxMaServiceCluster:getAccessToken"); RLock rLock = redissonClient.getLock(REDISSON_LOCK_PREFIX + ":WxMaServiceCluster:getAccessToken");
boolean doingUpdateAccessToken;
try { try {
doingUpdateAccessToken = rLock.tryLock(10, TimeUnit.SECONDS); boolean lockSuccess;
try {
lockSuccess = rLock.tryLock(10, TimeUnit.SECONDS);
} catch (InterruptedException e) { } catch (InterruptedException e) {
return this.getWxMaConfig().getAccessToken(); return this.getWxMaConfig().getAccessToken();
} }
if (!doingUpdateAccessToken) { if (!lockSuccess) {
throw new YamiShopBindException("服务器繁忙,请稍后再试"); throw new YamiShopBindException("服务器繁忙,请稍后再试");
} }
if (this.getWxMaConfig().isAccessTokenExpired()) { if (this.getWxMaConfig().isAccessTokenExpired() && !forceRefresh) {
return this.getWxMaConfig().getAccessToken(); return this.getWxMaConfig().getAccessToken();
} }
try {
String url = String.format(WxMaService.GET_ACCESS_TOKEN_URL, this.getWxMaConfig().getAppid(), String url = String.format(WxMaService.GET_ACCESS_TOKEN_URL, this.getWxMaConfig().getAppid(),
this.getWxMaConfig().getSecret()); this.getWxMaConfig().getSecret());
try { try {

@ -40,8 +40,9 @@ public class WxMpServiceClusterImpl extends WxMpServiceImpl {
RLock rLock = redissonClient.getLock(REDISSON_LOCK_PREFIX + ":WxMpServiceCluster:getAccessToken"); RLock rLock = redissonClient.getLock(REDISSON_LOCK_PREFIX + ":WxMpServiceCluster:getAccessToken");
Object result = null;
try {
boolean doingUpdateAccessToken; boolean doingUpdateAccessToken;
try { try {
doingUpdateAccessToken = rLock.tryLock(10, TimeUnit.SECONDS); doingUpdateAccessToken = rLock.tryLock(10, TimeUnit.SECONDS);
} catch (InterruptedException e) { } catch (InterruptedException e) {
@ -55,10 +56,6 @@ public class WxMpServiceClusterImpl extends WxMpServiceImpl {
if (this.getWxMpConfigStorage().isAccessTokenExpired()) { if (this.getWxMpConfigStorage().isAccessTokenExpired()) {
return this.getWxMpConfigStorage().getAccessToken(); return this.getWxMpConfigStorage().getAccessToken();
} }
Object result = null;
try {
String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL, String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL,
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret());
try { try {

Loading…
Cancel
Save