diff --git a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md index fe75ef4e..e58dfc8c 100644 --- a/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md +++ b/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md @@ -1,26 +1,35 @@ -# 使用说明 -1. 在自己的Spring Boot项目里,引入maven依赖 -```xml +# wx-java-miniapp-spring-boot-starter +## 快速开始 +1. 引入依赖 + ```xml com.github.binarywang wx-java-miniapp-spring-boot-starter ${version} - ``` -2. 添加配置(application.yml) -```yml -wx: - miniapp: - appid: 111 - secret: 111 - token: 111 - aesKey: 111 - msgDataFormat: JSON -``` - - - - - - + ``` +2. 添加配置(application.properties) + ```properties + # 公众号配置(必填) + wx.miniapp.appid = appId + wx.miniapp.secret = @secret + wx.miniapp.token = @token + wx.miniapp.aesKey = @aesKey + wx.miniapp.msgDataFormat = @msgDataFormat # 消息格式,XML或者JSON. + # 存储配置redis(可选) + # 注意: 指定redis.host值后不会使用容器注入的redis连接(JedisPool) + wx.miniapp.config-storage.type = jedis # 配置类型: memory(默认), jedis, redistemplate + wx.miniapp.config-storage.key-prefix = wa # 相关redis前缀配置: wa(默认) + wx.miniapp.config-storage.redis.host = 127.0.0.1 + wx.miniapp.config-storage.redis.port = 6379 + # http客户端配置 + wx.miniapp.config-storage.http-client-type=httpclient # http客户端类型: httpclient(默认) + wx.miniapp.config-storage.http-proxy-host= + wx.miniapp.config-storage.http-proxy-port= + wx.miniapp.config-storage.http-proxy-username= + wx.miniapp.config-storage.http-proxy-password= + ``` +3. 自动注入的类型 +- `WxMaService` +- `WxMaConfig` diff --git a/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md b/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md index 58c8efbd..65cc5bbb 100644 --- a/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md +++ b/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md @@ -1,4 +1,4 @@ -# wx-java-mp-starter +# wx-java-mp-spring-boot-starter ## 快速开始 1. 引入依赖 ```xml @@ -27,9 +27,9 @@ wx.mp.config-storage.http-proxy-username= wx.mp.config-storage.http-proxy-password= ``` -3. 支持自动注入的类型 - -`WxMpService`以及~~相关的服务类, 比如: `wxMpService.getXxxService`。~~ +3. 自动注入的类型 +- `WxMpService`以及~~相关的服务类, 比如: `wxMpService.getXxxService`。~~ +- `WxMpConfigStorage` diff --git a/spring-boot-starters/wx-java-open-spring-boot-starter/README.md b/spring-boot-starters/wx-java-open-spring-boot-starter/README.md index fd00f035..44333f8e 100644 --- a/spring-boot-starters/wx-java-open-spring-boot-starter/README.md +++ b/spring-boot-starters/wx-java-open-spring-boot-starter/README.md @@ -9,26 +9,27 @@ ``` 2. 添加配置(application.properties) - ``` - # 开放平台配置(必填) - wx.open.appId = @appId - wx.open.secret = @secret - wx.open.token = @token - wx.open.aesKey = @aesKey - # 存储配置redis(可选), 优先使用(wx.open.config-storage.redis)配置的redis, 支持自定注入的JedisPool - wx.open.config-storage.type = redis # 可选值, memory(默认), redis - wx.open.config-storage.redis.host = 127.0.0.1 - wx.open.config-storage.redis.port = 6379 + ```properties + # 公众号配置(必填) + wx.open.appId = appId + wx.open.secret = @secret + wx.open.token = @token + wx.open.aesKey = @aesKey + # 存储配置redis(可选) + # 优先注入容器的(JedisPool, RedissonClient), 当配置了wx.open.config-storage.redis.host, 不会使用容器注入redis连接配置 + wx.open.config-storage.type = redis # 配置类型: memory(默认), redis(jedis), jedis, redisson, redistemplate + wx.open.config-storage.key-prefix = wx # 相关redis前缀配置: wx(默认) + wx.open.config-storage.redis.host = 127.0.0.1 + wx.open.config-storage.redis.port = 6379 + # http客户端配置 + wx.open.config-storage.http-client-type=httpclient # http客户端类型: httpclient(默认) + wx.open.config-storage.http-proxy-host= + wx.open.config-storage.http-proxy-port= + wx.open.config-storage.http-proxy-username= + wx.open.config-storage.http-proxy-password= ``` 3. 支持自动注入的类型: `WxOpenService, WxOpenMessageRouter, WxOpenComponentService` 4. 覆盖自动配置: 自定义注入的bean会覆盖自动注入的 - WxOpenConfigStorage - WxOpenService - - - - - - - diff --git a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml index 95fe3b63..0684ef09 100644 --- a/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml +++ b/spring-boot-starters/wx-java-open-spring-boot-starter/pom.xml @@ -22,12 +22,18 @@ redis.clients jedis - compile + provided org.redisson redisson - compile + provided + + + org.springframework.data + spring-data-redis + ${spring.boot.version} + provided diff --git a/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/WxOpenStorageAutoConfiguration.java b/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/WxOpenStorageAutoConfiguration.java index a92b3483..c97f0045 100644 --- a/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/WxOpenStorageAutoConfiguration.java +++ b/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/config/WxOpenStorageAutoConfiguration.java @@ -3,20 +3,23 @@ package com.binarywang.spring.starter.wxjava.open.config; import com.binarywang.spring.starter.wxjava.open.properties.RedisProperties; import com.binarywang.spring.starter.wxjava.open.properties.WxOpenProperties; import lombok.RequiredArgsConstructor; +import me.chanjar.weixin.common.redis.JedisWxRedisOps; +import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps; +import me.chanjar.weixin.common.redis.RedissonWxRedisOps; +import me.chanjar.weixin.common.redis.WxRedisOps; import me.chanjar.weixin.open.api.WxOpenConfigStorage; import me.chanjar.weixin.open.api.impl.WxOpenInMemoryConfigStorage; import me.chanjar.weixin.open.api.impl.WxOpenInRedisConfigStorage; -import me.chanjar.weixin.open.api.impl.WxOpenInRedissonConfigStorage; import org.apache.commons.lang3.StringUtils; import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.redisson.config.TransportMode; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.StringRedisTemplate; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; @@ -29,15 +32,7 @@ import redis.clients.jedis.JedisPoolConfig; @RequiredArgsConstructor public class WxOpenStorageAutoConfiguration { private final WxOpenProperties properties; - - @Autowired(required = false) - private JedisPool jedisPool; - - @Autowired(required = false) - private RedissonClient redissonClient; - - @Value("${wx.open.config-storage.redis.host:}") - private String redisHost; + private final ApplicationContext applicationContext; @Bean @ConditionalOnMissingBean(WxOpenConfigStorage.class) @@ -45,43 +40,63 @@ public class WxOpenStorageAutoConfiguration { WxOpenProperties.ConfigStorage storage = properties.getConfigStorage(); WxOpenProperties.StorageType type = storage.getType(); - if (type == WxOpenProperties.StorageType.redis) { - return getWxOpenInRedisConfigStorage(); + WxOpenInMemoryConfigStorage config; + if (type == WxOpenProperties.StorageType.redis || type == WxOpenProperties.StorageType.jedis) { + config = getWxOpenInRedisConfigStorage(); + } else if (type == WxOpenProperties.StorageType.redisson) { + config = getWxOpenInRedissonConfigStorage(); + } else if (type == WxOpenProperties.StorageType.redistemplate) { + config = getWxOpenInRedisTemplateConfigStorage(); + } else { + config = getWxOpenInMemoryConfigStorage(); } - if (type == WxOpenProperties.StorageType.jedis) { - return getWxOpenInRedisConfigStorage(); - } - - if (type == WxOpenProperties.StorageType.redisson) { - return getWxOpenInRedissonConfigStorage(); + WxOpenProperties.ConfigStorage configStorageProperties = properties.getConfigStorage(); + config.setWxOpenInfo(properties.getAppId(), properties.getSecret(), properties.getToken(), properties.getAesKey()); + config.setHttpProxyHost(configStorageProperties.getHttpProxyHost()); + config.setHttpProxyUsername(configStorageProperties.getHttpProxyUsername()); + config.setHttpProxyPassword(configStorageProperties.getHttpProxyPassword()); + if (configStorageProperties.getHttpProxyPort() != null) { + config.setHttpProxyPort(configStorageProperties.getHttpProxyPort()); } - return getWxOpenInMemoryConfigStorage(); + return config; } private WxOpenInMemoryConfigStorage getWxOpenInMemoryConfigStorage() { WxOpenInMemoryConfigStorage config = new WxOpenInMemoryConfigStorage(); - config.setWxOpenInfo(properties.getAppId(), properties.getSecret(), properties.getToken(), properties.getAesKey()); return config; } private WxOpenInRedisConfigStorage getWxOpenInRedisConfigStorage() { - JedisPool poolToUse = jedisPool; - if (jedisPool == null || StringUtils.isNotEmpty(redisHost)) { - poolToUse = getJedisPool(); + RedisProperties redisProperties = properties.getConfigStorage().getRedis(); + JedisPool jedisPool; + if (redisProperties != null && StringUtils.isNotEmpty(redisProperties.getHost())) { + jedisPool = getJedisPool(); + } else { + jedisPool = applicationContext.getBean(JedisPool.class); } - WxOpenInRedisConfigStorage config = new WxOpenInRedisConfigStorage(poolToUse, properties.getConfigStorage().getKeyPrefix()); - config.setWxOpenInfo(properties.getAppId(), properties.getSecret(), properties.getToken(), properties.getAesKey()); + WxRedisOps redisOps = new JedisWxRedisOps(jedisPool); + WxOpenInRedisConfigStorage config = new WxOpenInRedisConfigStorage(redisOps, properties.getConfigStorage().getKeyPrefix()); return config; } - private WxOpenInRedissonConfigStorage getWxOpenInRedissonConfigStorage() { - RedissonClient redissonClientToUse = this.redissonClient; - if (redissonClient == null) { - redissonClientToUse = getRedissonClient(); + private WxOpenInRedisConfigStorage getWxOpenInRedissonConfigStorage() { + RedisProperties redisProperties = properties.getConfigStorage().getRedis(); + RedissonClient redissonClient; + if (redisProperties != null && StringUtils.isNotEmpty(redisProperties.getHost())) { + redissonClient = getRedissonClient(); + } else { + redissonClient = applicationContext.getBean(RedissonClient.class); } - WxOpenInRedissonConfigStorage config = new WxOpenInRedissonConfigStorage(redissonClientToUse, properties.getConfigStorage().getKeyPrefix()); - config.setWxOpenInfo(properties.getAppId(), properties.getSecret(), properties.getToken(), properties.getAesKey()); + WxRedisOps redisOps = new RedissonWxRedisOps(redissonClient); + WxOpenInRedisConfigStorage config = new WxOpenInRedisConfigStorage(redisOps, properties.getConfigStorage().getKeyPrefix()); + return config; + } + + private WxOpenInRedisConfigStorage getWxOpenInRedisTemplateConfigStorage() { + StringRedisTemplate redisTemplate = applicationContext.getBean(StringRedisTemplate.class); + WxRedisOps redisOps = new RedisTemplateWxRedisOps(redisTemplate); + WxOpenInRedisConfigStorage config = new WxOpenInRedisConfigStorage(redisOps, properties.getConfigStorage().getKeyPrefix()); return config; } diff --git a/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/RedisProperties.java b/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/RedisProperties.java index 565afa07..a03d3a47 100644 --- a/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/RedisProperties.java +++ b/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/RedisProperties.java @@ -16,7 +16,7 @@ public class RedisProperties implements Serializable { /** * 主机地址. */ - private String host = "127.0.0.1"; + private String host; /** * 端口号. diff --git a/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenProperties.java b/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenProperties.java index 77aabad5..9c9986ba 100644 --- a/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenProperties.java +++ b/spring-boot-starters/wx-java-open-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/open/properties/WxOpenProperties.java @@ -40,7 +40,7 @@ public class WxOpenProperties { private String aesKey; /** - * 存储策略, memory, redis. + * 存储策略. */ private ConfigStorage configStorage = new ConfigStorage(); @@ -49,11 +49,45 @@ public class WxOpenProperties { public static class ConfigStorage implements Serializable { private static final long serialVersionUID = 4815731027000065434L; + /** + * 存储类型. + */ private StorageType type = memory; + /** + * 指定key前缀. + */ + private String keyPrefix = "wx"; + + /** + * redis连接配置. + */ private RedisProperties redis = new RedisProperties(); - private String keyPrefix; + /** + * http客户端类型. + */ + private HttpClientType httpClientType = HttpClientType.httpclient; + + /** + * http代理主机. + */ + private String httpProxyHost; + + /** + * http代理端口. + */ + private Integer httpProxyPort; + + /** + * http代理用户名. + */ + private String httpProxyUsername; + + /** + * http代理密码. + */ + private String httpProxyPassword; } @@ -73,6 +107,17 @@ public class WxOpenProperties { /** * redisson. */ - redisson + redisson, + /** + * redistemplate + */ + redistemplate + } + + public enum HttpClientType { + /** + * HttpClient. + */ + httpclient } } diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/redis/JedisWxRedisOps.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/redis/JedisWxRedisOps.java index 0762e67d..ede2fcd8 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/redis/JedisWxRedisOps.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/redis/JedisWxRedisOps.java @@ -3,7 +3,7 @@ package me.chanjar.weixin.common.redis; import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.util.locks.JedisDistributedLock; import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisPool; +import redis.clients.util.Pool; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; @@ -11,7 +11,7 @@ import java.util.concurrent.locks.Lock; @RequiredArgsConstructor public class JedisWxRedisOps implements WxRedisOps { - private final JedisPool jedisPool; + private final Pool jedisPool; @Override public String getValue(String key) { diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInRedisConfigStorage.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInRedisConfigStorage.java index a681e293..31c199bb 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInRedisConfigStorage.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInRedisConfigStorage.java @@ -1,10 +1,12 @@ package me.chanjar.weixin.open.api.impl; -import me.chanjar.weixin.common.util.locks.JedisDistributedLock; +import lombok.NonNull; +import me.chanjar.weixin.common.redis.JedisWxRedisOps; +import me.chanjar.weixin.common.redis.WxRedisOps; import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisPool; import redis.clients.util.Pool; +import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; /** @@ -12,163 +14,127 @@ import java.util.concurrent.locks.Lock; */ public class WxOpenInRedisConfigStorage extends AbstractWxOpenInRedisConfigStorage { - protected final Pool jedisPool; + private final WxRedisOps redisOps; public WxOpenInRedisConfigStorage(Pool jedisPool) { - this.jedisPool = jedisPool; + this(jedisPool, null); } - public WxOpenInRedisConfigStorage(Pool jedisPool, String keyPrefix) { - this.jedisPool = jedisPool; - this.keyPrefix = keyPrefix; + public WxOpenInRedisConfigStorage(@NonNull Pool jedisPool, String keyPrefix) { + this(new JedisWxRedisOps(jedisPool), keyPrefix); } - public WxOpenInRedisConfigStorage(JedisPool jedisPool) { - this.jedisPool = jedisPool; + public WxOpenInRedisConfigStorage(@NonNull WxRedisOps redisOps, String keyPrefix) { + this.redisOps = redisOps; + this.keyPrefix = keyPrefix; } @Override public String getComponentVerifyTicket() { - try (Jedis jedis = this.jedisPool.getResource()) { - return jedis.get(this.componentVerifyTicketKey); - } + return redisOps.getValue(this.componentVerifyTicketKey); } @Override public void setComponentVerifyTicket(String componentVerifyTicket) { - try (Jedis jedis = this.jedisPool.getResource()) { - jedis.set(this.componentVerifyTicketKey, componentVerifyTicket); - } + redisOps.setValue(this.componentVerifyTicketKey, componentVerifyTicket, Integer.MAX_VALUE, TimeUnit.SECONDS); } @Override public String getComponentAccessToken() { - try (Jedis jedis = this.jedisPool.getResource()) { - return jedis.get(this.componentAccessTokenKey); - } + return redisOps.getValue(this.componentAccessTokenKey); } @Override public boolean isComponentAccessTokenExpired() { - try (Jedis jedis = this.jedisPool.getResource()) { - return jedis.ttl(this.componentAccessTokenKey) < 2; - } + Long expire = redisOps.getExpire(this.componentAccessTokenKey); + return expire == null || expire < 2; } @Override public void expireComponentAccessToken() { - try (Jedis jedis = this.jedisPool.getResource()) { - jedis.expire(this.componentAccessTokenKey, 0); - } + redisOps.expire(this.componentAccessTokenKey, 0, TimeUnit.SECONDS); } @Override public void updateComponentAccessToken(String componentAccessToken, int expiresInSeconds) { - try (Jedis jedis = this.jedisPool.getResource()) { - jedis.setex(this.componentAccessTokenKey, expiresInSeconds - 200, componentAccessToken); - } + redisOps.setValue(this.componentAccessTokenKey, componentAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS); } @Override public String getAuthorizerRefreshToken(String appId) { - try (Jedis jedis = this.jedisPool.getResource()) { - return jedis.get(this.getKey(this.authorizerRefreshTokenKey, appId)); - } + return redisOps.getValue(this.getKey(this.authorizerRefreshTokenKey, appId)); } @Override public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) { - try (Jedis jedis = this.jedisPool.getResource()) { - jedis.set(this.getKey(this.authorizerRefreshTokenKey, appId), authorizerRefreshToken); - } + redisOps.setValue(this.getKey(this.authorizerRefreshTokenKey, appId), authorizerRefreshToken, 0, TimeUnit.SECONDS); } @Override public String getAuthorizerAccessToken(String appId) { - try (Jedis jedis = this.jedisPool.getResource()) { - return jedis.get(this.getKey(this.authorizerAccessTokenKey, appId)); - } + return redisOps.getValue(this.getKey(this.authorizerAccessTokenKey, appId)); } @Override public boolean isAuthorizerAccessTokenExpired(String appId) { - try (Jedis jedis = this.jedisPool.getResource()) { - return jedis.ttl(this.getKey(this.authorizerAccessTokenKey, appId)) < 2; - } + Long expire = redisOps.getExpire(this.getKey(this.authorizerAccessTokenKey, appId)); + return expire == null || expire < 2; } @Override public void expireAuthorizerAccessToken(String appId) { - try (Jedis jedis = this.jedisPool.getResource()) { - jedis.expire(this.getKey(this.authorizerAccessTokenKey, appId), 0); - } + redisOps.expire(this.getKey(this.authorizerAccessTokenKey, appId), 0, TimeUnit.SECONDS); } @Override public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) { - try (Jedis jedis = this.jedisPool.getResource()) { - jedis.setex(this.getKey(this.authorizerAccessTokenKey, appId), expiresInSeconds - 200, authorizerAccessToken); - } + redisOps.setValue(this.getKey(this.authorizerAccessTokenKey, appId), authorizerAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS); } @Override public String getJsapiTicket(String appId) { - try (Jedis jedis = this.jedisPool.getResource()) { - return jedis.get(this.getKey(this.jsapiTicketKey, appId)); - } + return redisOps.getValue(this.getKey(this.jsapiTicketKey, appId)); } @Override public boolean isJsapiTicketExpired(String appId) { - try (Jedis jedis = this.jedisPool.getResource()) { - return jedis.ttl(this.getKey(this.jsapiTicketKey, appId)) < 2; - } + Long expire = redisOps.getExpire(this.getKey(this.jsapiTicketKey, appId)); + return expire == null || expire < 2; } @Override public void expireJsapiTicket(String appId) { - try (Jedis jedis = this.jedisPool.getResource()) { - jedis.expire(this.getKey(this.jsapiTicketKey, appId), 0); - } + redisOps.expire(this.getKey(this.jsapiTicketKey, appId), 0, TimeUnit.SECONDS); } @Override public void updateJsapiTicket(String appId, String jsapiTicket, int expiresInSeconds) { - try (Jedis jedis = this.jedisPool.getResource()) { - jedis.setex(this.getKey(this.jsapiTicketKey, appId), expiresInSeconds - 200, jsapiTicket); - } + redisOps.setValue(this.getKey(this.jsapiTicketKey, appId), jsapiTicket, expiresInSeconds - 200, TimeUnit.SECONDS); } @Override public String getCardApiTicket(String appId) { - try (Jedis jedis = this.jedisPool.getResource()) { - return jedis.get(this.getKey(this.cardApiTicket, appId)); - } + return redisOps.getValue(this.getKey(this.cardApiTicket, appId)); } @Override public boolean isCardApiTicketExpired(String appId) { - try (Jedis jedis = this.jedisPool.getResource()) { - return jedis.ttl(this.getKey(this.cardApiTicket, appId)) < 2; - } + Long expire = redisOps.getExpire(this.getKey(this.cardApiTicket, appId)); + return expire == null || expire < 2; } @Override public void expireCardApiTicket(String appId) { - try (Jedis jedis = this.jedisPool.getResource()) { - jedis.expire(this.getKey(this.cardApiTicket, appId), 0); - } + redisOps.expire(this.getKey(this.cardApiTicket, appId), 0, TimeUnit.SECONDS); } @Override public void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds) { - try (Jedis jedis = this.jedisPool.getResource()) { - jedis.setex(this.getKey(this.cardApiTicket, appId), expiresInSeconds - 200, cardApiTicket); - } + redisOps.setValue(this.getKey(this.cardApiTicket, appId), cardApiTicket, expiresInSeconds - 200, TimeUnit.SECONDS); } @Override public Lock getLockByKey(String key) { - return new JedisDistributedLock(jedisPool, getKey(lockKey, key)); + return redisOps.getLock(key); } } diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInRedissonConfigStorage.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInRedissonConfigStorage.java index 7fdf1ba1..070d9ebf 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInRedissonConfigStorage.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInRedissonConfigStorage.java @@ -1,128 +1,140 @@ package me.chanjar.weixin.open.api.impl; -import java.util.concurrent.TimeUnit; +import lombok.NonNull; +import me.chanjar.weixin.common.redis.RedissonWxRedisOps; +import me.chanjar.weixin.common.redis.WxRedisOps; import org.redisson.api.RedissonClient; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Lock; + /** * @author yangyidian * @date 2020/01/06 **/ -public class WxOpenInRedissonConfigStorage extends AbstractWxOpenInRedisConfigStorage{ - - private RedissonClient redissonClient; - - public WxOpenInRedissonConfigStorage(RedissonClient redissonClient, String keyPrefix) { - this.keyPrefix = keyPrefix; - this.redissonClient = redissonClient; - } - - public WxOpenInRedissonConfigStorage(RedissonClient redissonClient) { - this.redissonClient = redissonClient; - } - - @Override - public String getComponentVerifyTicket() { - Object value = redissonClient.getBucket(this.componentVerifyTicketKey).get(); - return value == null ? null : value.toString(); - } - - @Override - public void setComponentVerifyTicket(String componentVerifyTicket) { - redissonClient.getBucket(this.componentVerifyTicketKey).set(componentVerifyTicket); - } - - @Override - public String getComponentAccessToken() { - Object value = redissonClient.getBucket(this.componentAccessTokenKey).get(); - return value == null ? null : value.toString(); - } - - @Override - public boolean isComponentAccessTokenExpired() { - return redissonClient.getBucket(this.componentAccessTokenKey).remainTimeToLive() < 2; - } - - @Override - public void expireComponentAccessToken() { - redissonClient.getBucket(this.componentAccessTokenKey).expire(0, TimeUnit.SECONDS); - } - - @Override - public void updateComponentAccessToken(String componentAccessToken, int expiresInSeconds) { - redissonClient.getBucket(this.componentAccessTokenKey).set(componentAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS); - } - - @Override - public String getAuthorizerRefreshToken(String appId) { - Object value = redissonClient.getBucket(this.getKey(this.authorizerRefreshTokenKey, appId)).get(); - return value == null ? null : value.toString(); - } - - @Override - public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) { - redissonClient.getBucket(this.getKey(this.authorizerRefreshTokenKey, appId)).set(authorizerRefreshToken); - } - - @Override - public String getAuthorizerAccessToken(String appId) { - Object value = redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).get(); - return value == null ? null : value.toString(); - } - - @Override - public boolean isAuthorizerAccessTokenExpired(String appId) { - return redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).remainTimeToLive() < 2; - } - - @Override - public void expireAuthorizerAccessToken(String appId) { - redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).expire(0, TimeUnit.SECONDS); - } - - @Override - public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) { - redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).set(authorizerAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS); - } - - @Override - public String getJsapiTicket(String appId) { - Object value = redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).get(); - return value == null ? null : value.toString(); - } - - @Override - public boolean isJsapiTicketExpired(String appId) { - return redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).remainTimeToLive() < 2; - } - - @Override - public void expireJsapiTicket(String appId) { - redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).expire(0, TimeUnit.SECONDS); - } - - @Override - public void updateJsapiTicket(String appId, String jsapiTicket, int expiresInSeconds) { - redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).set(jsapiTicket, expiresInSeconds - 200, TimeUnit.SECONDS); - } - - @Override - public String getCardApiTicket(String appId) { - Object value = redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).get(); - return value == null ? null : value.toString(); - } - - @Override - public boolean isCardApiTicketExpired(String appId) { - return redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).remainTimeToLive() < 2; - } - - @Override - public void expireCardApiTicket(String appId) { - redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).expire(0 ,TimeUnit.SECONDS); - } - - @Override - public void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds) { - redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).set(cardApiTicket, expiresInSeconds - 200, TimeUnit.SECONDS); - } +public class WxOpenInRedissonConfigStorage extends AbstractWxOpenInRedisConfigStorage { + + private final WxRedisOps redisOps; + + public WxOpenInRedissonConfigStorage(@NonNull RedissonClient redissonClient, String keyPrefix) { + this(new RedissonWxRedisOps(redissonClient), keyPrefix); + } + + public WxOpenInRedissonConfigStorage(@NonNull RedissonClient redissonClient) { + this(redissonClient, null); + } + + private WxOpenInRedissonConfigStorage(@NonNull WxRedisOps redisOps, String keyPrefix) { + this.redisOps = redisOps; + this.keyPrefix = keyPrefix; + } + + @Override + public String getComponentVerifyTicket() { + return redisOps.getValue(this.componentVerifyTicketKey); + } + + @Override + public void setComponentVerifyTicket(String componentVerifyTicket) { + redisOps.setValue(this.componentVerifyTicketKey, componentVerifyTicket, Integer.MAX_VALUE, TimeUnit.SECONDS); + } + + @Override + public String getComponentAccessToken() { + return redisOps.getValue(this.componentAccessTokenKey); + } + + @Override + public boolean isComponentAccessTokenExpired() { + Long expire = redisOps.getExpire(this.componentAccessTokenKey); + return expire == null || expire < 2; + } + + @Override + public void expireComponentAccessToken() { + redisOps.expire(this.componentAccessTokenKey, 0, TimeUnit.SECONDS); + } + + @Override + public void updateComponentAccessToken(String componentAccessToken, int expiresInSeconds) { + redisOps.setValue(this.componentAccessTokenKey, componentAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS); + } + + @Override + public String getAuthorizerRefreshToken(String appId) { + return redisOps.getValue(this.getKey(this.authorizerRefreshTokenKey, appId)); + } + + @Override + public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) { + redisOps.setValue(this.getKey(this.authorizerRefreshTokenKey, appId), authorizerRefreshToken, 0, TimeUnit.SECONDS); + } + + @Override + public String getAuthorizerAccessToken(String appId) { + return redisOps.getValue(this.getKey(this.authorizerAccessTokenKey, appId)); + } + + @Override + public boolean isAuthorizerAccessTokenExpired(String appId) { + Long expire = redisOps.getExpire(this.getKey(this.authorizerAccessTokenKey, appId)); + return expire == null || expire < 2; + } + + @Override + public void expireAuthorizerAccessToken(String appId) { + redisOps.expire(this.getKey(this.authorizerAccessTokenKey, appId), 0, TimeUnit.SECONDS); + } + + @Override + public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) { + redisOps.setValue(this.getKey(this.authorizerAccessTokenKey, appId), authorizerAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS); + } + + @Override + public String getJsapiTicket(String appId) { + return redisOps.getValue(this.getKey(this.jsapiTicketKey, appId)); + } + + @Override + public boolean isJsapiTicketExpired(String appId) { + Long expire = redisOps.getExpire(this.getKey(this.jsapiTicketKey, appId)); + return expire == null || expire < 2; + } + + @Override + public void expireJsapiTicket(String appId) { + redisOps.expire(this.getKey(this.jsapiTicketKey, appId), 0, TimeUnit.SECONDS); + } + + @Override + public void updateJsapiTicket(String appId, String jsapiTicket, int expiresInSeconds) { + redisOps.setValue(this.getKey(this.jsapiTicketKey, appId), jsapiTicket, expiresInSeconds - 200, TimeUnit.SECONDS); + } + + @Override + public String getCardApiTicket(String appId) { + return redisOps.getValue(this.getKey(this.cardApiTicket, appId)); + } + + @Override + public boolean isCardApiTicketExpired(String appId) { + Long expire = redisOps.getExpire(this.getKey(this.cardApiTicket, appId)); + return expire == null || expire < 2; + } + + @Override + public void expireCardApiTicket(String appId) { + redisOps.expire(this.getKey(this.cardApiTicket, appId), 0, TimeUnit.SECONDS); + } + + @Override + public void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds) { + redisOps.setValue(this.getKey(this.cardApiTicket, appId), cardApiTicket, expiresInSeconds - 200, TimeUnit.SECONDS); + } + + @Override + public Lock getLockByKey(String key) { + return redisOps.getLock(key); + } }