From 0e580a05fffe3eca27ee118c02481c83dd3523fa Mon Sep 17 00:00:00 2001 From: nickwongwong Date: Wed, 13 Sep 2017 17:51:24 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20issue=20#335:=20=E9=87=8D=E6=9E=84WxMpInR?= =?UTF-8?q?edisConfigStorage,=E6=94=B9=E7=94=A8=E8=BF=9E=E6=8E=A5=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mp/api/WxMpInRedisConfigStorage.java | 89 ++++++++++++++----- 1 file changed, 65 insertions(+), 24 deletions(-) diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInRedisConfigStorage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInRedisConfigStorage.java index d22214df..3254972c 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInRedisConfigStorage.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInRedisConfigStorage.java @@ -1,11 +1,12 @@ package me.chanjar.weixin.mp.api; import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; /** * 基于Redis的微信配置provider * - * @author lly835 + * @author nickwong */ @SuppressWarnings("hiding") public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage { @@ -16,75 +17,115 @@ public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage { private final static String CARDAPI_TICKET_KEY = "wechat_cardapi_ticket_"; - protected Jedis jedis; + /** + * 使用连接池保证线程安全 + */ + protected final JedisPool jedisPool; + + private String accessTokenKey; + + private String jsapiTicketKey; + + private String cardapiTicketKey; + + public WxMpInRedisConfigStorage(JedisPool jedisPool) { + this.jedisPool = jedisPool; + } + + /** + * 每个公众号生成独有的存储key + * + * @param appId + */ + @Override + public void setAppId(String appId) { + super.setAppId(appId); + this.accessTokenKey = ACCESS_TOKEN_KEY.concat(appId); + this.jsapiTicketKey = JSAPI_TICKET_KEY.concat(appId); + this.cardapiTicketKey = CARDAPI_TICKET_KEY.concat(appId); + } @Override public String getAccessToken() { - return jedis.get(ACCESS_TOKEN_KEY.concat(appId)); + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.get(accessTokenKey); + } } @Override public boolean isAccessTokenExpired() { - return jedis.ttl(ACCESS_TOKEN_KEY.concat(appId)) < 2; + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.ttl(accessTokenKey) < 2; + } } @Override public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) { - jedis.set(ACCESS_TOKEN_KEY.concat(appId), accessToken); - jedis.expire(ACCESS_TOKEN_KEY.concat(appId), expiresInSeconds - 200); + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.setex(accessTokenKey, expiresInSeconds - 200, accessToken); + } } @Override public void expireAccessToken() { - jedis.expire(ACCESS_TOKEN_KEY.concat(appId), 0); + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.expire(accessTokenKey, 0); + } } @Override public String getJsapiTicket() { - return jedis.get(JSAPI_TICKET_KEY.concat(appId)); + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.get(jsapiTicketKey); + } } @Override public boolean isJsapiTicketExpired() { - return jedis.ttl(JSAPI_TICKET_KEY.concat(appId)) < 2; + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.ttl(jsapiTicketKey) < 2; + } } @Override public synchronized void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) { - jedis.set(JSAPI_TICKET_KEY.concat(appId), jsapiTicket); - jedis.expire(JSAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200); + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.setex(jsapiTicketKey, expiresInSeconds - 200, jsapiTicket); + } } @Override public void expireJsapiTicket() { - jedis.expire(JSAPI_TICKET_KEY.concat(appId), 0); + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.expire(jsapiTicketKey, 0); + } } - /** - * 卡券api_ticket - */ @Override public String getCardApiTicket() { - return jedis.get(CARDAPI_TICKET_KEY.concat(appId)); + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.get(cardapiTicketKey); + } } @Override public boolean isCardApiTicketExpired() { - return jedis.ttl(CARDAPI_TICKET_KEY.concat(appId)) < 2; + try (Jedis jedis = this.jedisPool.getResource()) { + return jedis.ttl(cardapiTicketKey) < 2; + } } @Override public synchronized void updateCardApiTicket(String cardApiTicket, int expiresInSeconds) { - jedis.set(CARDAPI_TICKET_KEY.concat(appId), cardApiTicket); - jedis.expire(CARDAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200); + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.setex(cardapiTicketKey, expiresInSeconds - 200, cardApiTicket); + } } @Override public void expireCardApiTicket() { - jedis.expire(CARDAPI_TICKET_KEY.concat(appId), 0); - } - - public void setJedis(Jedis jedis) { - this.jedis = jedis; + try (Jedis jedis = this.jedisPool.getResource()) { + jedis.expire(cardapiTicketKey, 0); + } } }