-
WxMpConfigStorage接口提供了一下参数获取的get-interface: - 对应的变量在使用时要注意并发处理,这部分后面补充
protected volatile String appId;
protected volatile String secret;
protected volatile String token;
protected volatile String templateId;
protected volatile String accessToken;
protected volatile String aesKey;
protected volatile long expiresTime;
protected volatile String oauth2redirectUri;
protected volatile String httpProxyHost;
protected volatile int httpProxyPort;
protected volatile String httpProxyUsername;
protected volatile String httpProxyPassword;
protected volatile String jsapiTicket;
protected volatile long jsapiTicketExpiresTime;
protected volatile String sdkTicket;
protected volatile long sdkTicketExpiresTime;
protected volatile String cardApiTicket;
protected volatile long cardApiTicketExpiresTime;
/**
* 微信客户端配置存储.
*
*/
public interface WxMpConfigStorage {
String getAccessToken();
Lock getAccessTokenLock();
boolean isAccessTokenExpired();
/**
* 强制将access token过期掉.
*/
void expireAccessToken();
/**
* 应该是线程安全的.
*
* @param accessToken 要更新的WxAccessToken对象
*/
void updateAccessToken(WxAccessToken accessToken);
/**
* 应该是线程安全的.
*
* @param accessToken 新的accessToken值
* @param expiresInSeconds 过期时间,以秒为单位
*/
void updateAccessToken(String accessToken, int expiresInSeconds);
String getTicket(TicketType type);
Lock getTicketLock(TicketType type);
boolean isTicketExpired(TicketType type);
/**
* 强制将ticket过期掉.
*/
void expireTicket(TicketType type);
/**
* 更新ticket.
* 应该是线程安全的
*
* @param type ticket类型
* @param ticket 新的ticket值
* @param expiresInSeconds 过期时间,以秒为单位
*/
void updateTicket(TicketType type, String ticket, int expiresInSeconds);
String getAppId();
String getSecret();
String getToken();
String getAesKey();
String getTemplateId();
long getExpiresTime();
String getOauth2redirectUri();
String getHttpProxyHost();
int getHttpProxyPort();
String getHttpProxyUsername();
String getHttpProxyPassword();
File getTmpDirFile();
/**
* http client builder.
*
* @return ApacheHttpClientBuilder
*/
ApacheHttpClientBuilder getApacheHttpClientBuilder();
/**
* 是否自动刷新token.
*/
boolean autoRefreshToken();
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在线程安全的基础上使用变量
用操作accessToken来举例:
1.获取accessToken
this.getWxMpConfigStorage().isAccessTokenExpired()
2.获取锁
Lock lock = this.getWxMpConfigStorage().getAccessTokenLock();
3.构建url
String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL,
this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret());
4.发送http请求
//目前HttpClient最新版的实现类为CloseableHttpClient
CloseableHttpResponse response = getRequestHttpClient().execute(httpGet)
5.处理返回结果
String resultContent = new BasicResponseHandler().handleResponse(response);
6.获取token
WxAccessToken accessToken = WxAccessToken.fromJson(resultContent);
7.更新内存
this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn());
8.返回token
return this.getWxMpConfigStorage().getAccessToken();
9.释放锁
lock.unlock();
该博客讨论了如何在确保线程安全的前提下处理微信客户端的配置信息存储,特别是涉及并发控制的流程,包括获取锁、发送HTTP请求、更新内存等关键步骤。
434

被折叠的 条评论
为什么被折叠?



