ソースを参照

:art: 优化公众号Spring Boot Starter的redisTemplate注入等代码

Dream2Land 4 年 前
コミット
8929fc41ab

+ 10 - 0
spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml

@@ -30,6 +30,16 @@
       <version>${spring.boot.version}</version>
       <scope>provided</scope>
     </dependency>
+    <dependency>
+      <groupId>org.jodd</groupId>
+      <artifactId>jodd-http</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.squareup.okhttp3</groupId>
+      <artifactId>okhttp</artifactId>
+      <scope>provided</scope>
+    </dependency>
   </dependencies>
 
   <build>

+ 1 - 1
spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpServiceAutoConfiguration.java

@@ -2,7 +2,7 @@ package com.binarywang.spring.starter.wxjava.mp.config;
 
 import com.binarywang.spring.starter.wxjava.mp.enums.HttpClientType;
 import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties;
-import me.chanjar.weixin.mp.api.*;
+import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.api.impl.WxMpServiceHttpClientImpl;
 import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
 import me.chanjar.weixin.mp.api.impl.WxMpServiceJoddHttpImpl;

+ 138 - 120
spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java

@@ -1,21 +1,11 @@
 package com.binarywang.spring.starter.wxjava.mp.config;
 
-import java.util.Set;
-
-import org.apache.commons.lang3.StringUtils;
-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 com.binarywang.spring.starter.wxjava.mp.enums.StorageType;
 import com.binarywang.spring.starter.wxjava.mp.properties.RedisProperties;
 import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties;
 import com.google.common.collect.Sets;
-
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.redis.JedisWxRedisOps;
 import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps;
 import me.chanjar.weixin.common.redis.WxRedisOps;
@@ -23,126 +13,154 @@ import me.chanjar.weixin.mp.bean.WxMpHostConfig;
 import me.chanjar.weixin.mp.config.WxMpConfigStorage;
 import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
 import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl;
+import org.apache.commons.lang3.StringUtils;
+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.JedisPoolAbstract;
 import redis.clients.jedis.JedisPoolConfig;
 import redis.clients.jedis.JedisSentinelPool;
 
+import java.util.Set;
+
 /**
  * 微信公众号存储策略自动配置.
  *
  * @author someone
  */
+@Slf4j
 @Configuration
 @RequiredArgsConstructor
 public class WxMpStorageAutoConfiguration {
-	private final ApplicationContext applicationContext;
-
-	private final WxMpProperties wxMpProperties;
-
-	@Value("${wx.mp.config-storage.redis.host:")
-	private String redisHost;
-
-	@Value("${wx.mp.configStorage.redis.host:")
-	private String redisHost2;
-
-	@Bean
-	@ConditionalOnMissingBean(WxMpConfigStorage.class)
-	public WxMpConfigStorage wxMpConfigStorage() {
-		StorageType type = wxMpProperties.getConfigStorage().getType();
-		WxMpConfigStorage config;
-		switch (type) {
-		case Jedis:
-			config = jedisConfigStorage();
-			break;
-		case RedisTemplate:
-			config = redisTemplateConfigStorage();
-			break;
-		default:
-			config = defaultConfigStorage();
-			break;
-		}
-		// wx host config
-		if (null != wxMpProperties.getHosts() && StringUtils.isNotEmpty(wxMpProperties.getHosts().getApiHost())) {
-			WxMpHostConfig hostConfig = new WxMpHostConfig();
-			hostConfig.setApiHost(wxMpProperties.getHosts().getApiHost());
-			hostConfig.setMpHost(wxMpProperties.getHosts().getMpHost());
-			hostConfig.setOpenHost(wxMpProperties.getHosts().getOpenHost());
-			config.setHostConfig(hostConfig);
-		}
-		return config;
-	}
-
-	private WxMpConfigStorage defaultConfigStorage() {
-		WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
-		setWxMpInfo(config);
-		return config;
-	}
-
-	private WxMpConfigStorage jedisConfigStorage() {
-		JedisPoolAbstract jedisPool;
-		if (StringUtils.isNotEmpty(redisHost) || StringUtils.isNotEmpty(redisHost2)) {
-			jedisPool = getJedisPool();
-		} else {
-			jedisPool = applicationContext.getBean(JedisPool.class);
-		}
-		WxRedisOps redisOps = new JedisWxRedisOps(jedisPool);
-		WxMpRedisConfigImpl wxMpRedisConfig = new WxMpRedisConfigImpl(redisOps,
-				wxMpProperties.getConfigStorage().getKeyPrefix());
-		setWxMpInfo(wxMpRedisConfig);
-		return wxMpRedisConfig;
-	}
-
-	private WxMpConfigStorage redisTemplateConfigStorage() {
-		StringRedisTemplate redisTemplate = applicationContext.getBean(StringRedisTemplate.class);
-		WxRedisOps redisOps = new RedisTemplateWxRedisOps(redisTemplate);
-		WxMpRedisConfigImpl wxMpRedisConfig = new WxMpRedisConfigImpl(redisOps,
-				wxMpProperties.getConfigStorage().getKeyPrefix());
-		setWxMpInfo(wxMpRedisConfig);
-		return wxMpRedisConfig;
-	}
-
-	private void setWxMpInfo(WxMpDefaultConfigImpl config) {
-		WxMpProperties properties = wxMpProperties;
-		WxMpProperties.ConfigStorage configStorageProperties = properties.getConfigStorage();
-		config.setAppId(properties.getAppId());
-		config.setSecret(properties.getSecret());
-		config.setToken(properties.getToken());
-		config.setAesKey(properties.getAesKey());
-
-		config.setHttpProxyHost(configStorageProperties.getHttpProxyHost());
-		config.setHttpProxyUsername(configStorageProperties.getHttpProxyUsername());
-		config.setHttpProxyPassword(configStorageProperties.getHttpProxyPassword());
-		if (configStorageProperties.getHttpProxyPort() != null) {
-			config.setHttpProxyPort(configStorageProperties.getHttpProxyPort());
-		}
-	}
-
-	private JedisPoolAbstract getJedisPool() {
-		WxMpProperties.ConfigStorage storage = wxMpProperties.getConfigStorage();
-		RedisProperties redis = storage.getRedis();
-
-		JedisPoolConfig config = new JedisPoolConfig();
-		if (redis.getMaxActive() != null) {
-			config.setMaxTotal(redis.getMaxActive());
-		}
-		if (redis.getMaxIdle() != null) {
-			config.setMaxIdle(redis.getMaxIdle());
-		}
-		if (redis.getMaxWaitMillis() != null) {
-			config.setMaxWaitMillis(redis.getMaxWaitMillis());
-		}
-		if (redis.getMinIdle() != null) {
-			config.setMinIdle(redis.getMinIdle());
-		}
-		config.setTestOnBorrow(true);
-		config.setTestWhileIdle(true);
-		if (StringUtils.isNotEmpty(redis.getSentinelIps())) {
-			Set<String> sentinels = Sets.newHashSet(redis.getSentinelIps().split(","));
-			return new JedisSentinelPool(redis.getSentinelName(), sentinels);
-		}
-
-		return new JedisPool(config, redis.getHost(), redis.getPort(), redis.getTimeout(), redis.getPassword(),
-				redis.getDatabase());
-	}
+  private final ApplicationContext applicationContext;
+
+  private final WxMpProperties wxMpProperties;
+
+  @Value("${wx.mp.config-storage.redis.host:")
+  private String redisHost;
+
+  @Value("${wx.mp.configStorage.redis.host:")
+  private String redisHost2;
+
+  @Bean
+  @ConditionalOnMissingBean(WxMpConfigStorage.class)
+  public WxMpConfigStorage wxMpConfigStorage() {
+    StorageType type = wxMpProperties.getConfigStorage().getType();
+    WxMpConfigStorage config;
+    switch (type) {
+      case Jedis:
+        config = jedisConfigStorage();
+        break;
+      case RedisTemplate:
+        config = redisTemplateConfigStorage();
+        break;
+      default:
+        config = defaultConfigStorage();
+        break;
+    }
+    // wx host config
+    if (null != wxMpProperties.getHosts() && StringUtils.isNotEmpty(wxMpProperties.getHosts().getApiHost())) {
+      WxMpHostConfig hostConfig = new WxMpHostConfig();
+      hostConfig.setApiHost(wxMpProperties.getHosts().getApiHost());
+      hostConfig.setMpHost(wxMpProperties.getHosts().getMpHost());
+      hostConfig.setOpenHost(wxMpProperties.getHosts().getOpenHost());
+      config.setHostConfig(hostConfig);
+    }
+    return config;
+  }
+
+  private WxMpConfigStorage defaultConfigStorage() {
+    WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
+    setWxMpInfo(config);
+    return config;
+  }
+
+  private WxMpConfigStorage jedisConfigStorage() {
+    JedisPoolAbstract jedisPool;
+    if (StringUtils.isNotEmpty(redisHost) || StringUtils.isNotEmpty(redisHost2)) {
+      jedisPool = getJedisPool();
+    } else {
+      jedisPool = applicationContext.getBean(JedisPool.class);
+    }
+    WxRedisOps redisOps = new JedisWxRedisOps(jedisPool);
+    WxMpRedisConfigImpl wxMpRedisConfig = new WxMpRedisConfigImpl(redisOps,
+      wxMpProperties.getConfigStorage().getKeyPrefix());
+    setWxMpInfo(wxMpRedisConfig);
+    return wxMpRedisConfig;
+  }
+
+  private WxMpConfigStorage redisTemplateConfigStorage() {
+    StringRedisTemplate redisTemplate = null;
+    try {
+      redisTemplate = applicationContext.getBean(StringRedisTemplate.class);
+    } catch (Exception e) {
+      log.error(e.getMessage(), e);
+    }
+    try {
+      if (null == redisTemplate) {
+        redisTemplate = (StringRedisTemplate) applicationContext.getBean("stringRedisTemplate");
+      }
+    } catch (Exception e) {
+      log.error(e.getMessage(), e);
+    }
+
+    if (null == redisTemplate) {
+      redisTemplate = (StringRedisTemplate) applicationContext.getBean("redisTemplate");
+    }
+
+    WxRedisOps redisOps = new RedisTemplateWxRedisOps(redisTemplate);
+    WxMpRedisConfigImpl wxMpRedisConfig = new WxMpRedisConfigImpl(redisOps,
+      wxMpProperties.getConfigStorage().getKeyPrefix());
+
+    setWxMpInfo(wxMpRedisConfig);
+    return wxMpRedisConfig;
+  }
+
+  private void setWxMpInfo(WxMpDefaultConfigImpl config) {
+    WxMpProperties properties = wxMpProperties;
+    WxMpProperties.ConfigStorage configStorageProperties = properties.getConfigStorage();
+    config.setAppId(properties.getAppId());
+    config.setSecret(properties.getSecret());
+    config.setToken(properties.getToken());
+    config.setAesKey(properties.getAesKey());
+
+    config.setHttpProxyHost(configStorageProperties.getHttpProxyHost());
+    config.setHttpProxyUsername(configStorageProperties.getHttpProxyUsername());
+    config.setHttpProxyPassword(configStorageProperties.getHttpProxyPassword());
+    if (configStorageProperties.getHttpProxyPort() != null) {
+      config.setHttpProxyPort(configStorageProperties.getHttpProxyPort());
+    }
+  }
+
+  private JedisPoolAbstract getJedisPool() {
+    WxMpProperties.ConfigStorage storage = wxMpProperties.getConfigStorage();
+    RedisProperties redis = storage.getRedis();
+
+    JedisPoolConfig config = new JedisPoolConfig();
+    if (redis.getMaxActive() != null) {
+      config.setMaxTotal(redis.getMaxActive());
+    }
+    if (redis.getMaxIdle() != null) {
+      config.setMaxIdle(redis.getMaxIdle());
+    }
+    if (redis.getMaxWaitMillis() != null) {
+      config.setMaxWaitMillis(redis.getMaxWaitMillis());
+    }
+    if (redis.getMinIdle() != null) {
+      config.setMinIdle(redis.getMinIdle());
+    }
+    config.setTestOnBorrow(true);
+    config.setTestWhileIdle(true);
+    if (StringUtils.isNotEmpty(redis.getSentinelIps())) {
+      Set<String> sentinels = Sets.newHashSet(redis.getSentinelIps().split(","));
+      return new JedisSentinelPool(redis.getSentinelName(), sentinels);
+    }
+
+    return new JedisPool(config, redis.getHost(), redis.getPort(), redis.getTimeout(), redis.getPassword(),
+      redis.getDatabase());
+  }
 }

+ 11 - 11
spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/HostConfig.java

@@ -1,18 +1,18 @@
 package com.binarywang.spring.starter.wxjava.mp.properties;
 
-import java.io.Serializable;
-
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
 public class HostConfig implements Serializable {
-	  
-	private static final long serialVersionUID = -4172767630740346001L;
-
-	private String apiHost;
-	
-	private String openHost;
-	
-	private String mpHost;
-	  
+
+  private static final long serialVersionUID = -4172767630740346001L;
+
+  private String apiHost;
+
+  private String openHost;
+
+  private String mpHost;
+
 }

+ 2 - 2
spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/RedisProperties.java

@@ -38,12 +38,12 @@ public class RedisProperties implements Serializable {
    * 数据库.
    */
   private int database = 0;
-  
+
   /**
    * sentinel ips
    */
   private String sentinelIps;
-  
+
   /**
    * sentinel name
    */

+ 1 - 1
spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/WxMpProperties.java

@@ -40,7 +40,7 @@ public class WxMpProperties {
    * 设置微信公众号的EncodingAESKey.
    */
   private String aesKey;
-  
+
   /**
    * 自定义host配置
    */

+ 1 - 1
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedissonConfigImpl.java

@@ -41,7 +41,7 @@ public class WxCpRedissonConfigImpl extends WxCpDefaultConfigImpl {
     this(redissonClient, null);
   }
 
-  private WxCpRedissonConfigImpl(@NonNull WxRedisOps redisOps, String keyPrefix) {
+  public WxCpRedissonConfigImpl(@NonNull WxRedisOps redisOps, String keyPrefix) {
     this.redisOps = redisOps;
     this.keyPrefix = keyPrefix;
   }